hholzgra                Sat Jun 21 15:28:19 2003 EDT

  Modified files:              
    /php4/scripts/ext_skel_ng   php_function.php 
  Log:
  thoughts about a new proto parser ...
  
  
Index: php4/scripts/ext_skel_ng/php_function.php
diff -u php4/scripts/ext_skel_ng/php_function.php:1.15 
php4/scripts/ext_skel_ng/php_function.php:1.16
--- php4/scripts/ext_skel_ng/php_function.php:1.15      Fri Jun 20 07:30:42 2003
+++ php4/scripts/ext_skel_ng/php_function.php   Sat Jun 21 15:28:19 2003
@@ -14,13 +14,60 @@
                } 
                
                function parse_proto($proto) {
+                       /* TODO
+                                a 'real' parser is needed here (lex/yacc with PHP 
output anyone?)
+                                to support stuff like default values 
+                                the current tokenizer is not clever enough for this 
...
+
+                                the grammer for a prototype would look like this: ?
+
+                                proto: type name '(' param-list ')'
+
+                                name: [A-Za-z_][A-Za-z0-9_]*
+                                
+                                type: "void"
+                                    | typespec
+
+         typespec: typename
+                 | typename '&'
+                                                
+                                typename: bool | boolean
+                                        | int | integer | long
+                                                                | float | double | 
real
+                                                                | string
+                                                                | array
+                 | object | object name
+                                                                | resource | resource 
name
+                                                                | mixed
+                                                                | callback
+                                                                | stream
+
+                                       param-list: void
+                    | parameter
+                                                                               | 
parm-list ',' parameter
+                                                                   
+                                       parameter: typespec name
+                   | typespec name '=' default-value
+
+                                       default-value: "true" | "false" | "array()"
+                                                    | numeric-value
+                                                                                      
  | string
+
+                                       string: '"' character* '"'
+          
+                                       number: ... the usual int, float, hex and 
octal stuff ...
+                        */
+                       
                        // 'tokenize' it
+                       $tokens=array();
+
+                       // we collect valid C names as Strings, any other character 
for itself, blanks are skipped
+                       // TODO: this does no longer work if we ever add default 
values ...
                        $len=strlen($proto);
                        $name="";
-                       $tokens=array();
                        for ($n=0;$n<$len;$n++) {
                                $char = $proto{$n};
-                               if (ereg("[a-zA-Z0-9_]",$char)) {
+                               if (ctype_alpha($char) || $char == '_' || ($n && 
ctype_digit($char))) {
                                        $name.=$char;
                                } else {
                                        if ($name) $tokens[]=$name;



-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to