diff options
author | Hartmut Holzgraefe <hholzgra@php.net> | 2003-06-21 19:28:19 +0000 |
---|---|---|
committer | Hartmut Holzgraefe <hholzgra@php.net> | 2003-06-21 19:28:19 +0000 |
commit | ba8e371db1fdd31f88700d3464df7c331389326d (patch) | |
tree | 1b67167af382b3f65082c8a40a7dfe4c570358c8 /scripts | |
parent | 7319c5132bc3e35a4311235950e441046184cc95 (diff) | |
download | php-git-ba8e371db1fdd31f88700d3464df7c331389326d.tar.gz |
thoughts about a new proto parser ...
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/ext_skel_ng/php_function.php | 51 |
1 files changed, 49 insertions, 2 deletions
diff --git a/scripts/ext_skel_ng/php_function.php b/scripts/ext_skel_ng/php_function.php index 49f6d06cf9..1b2005b78c 100644 --- a/scripts/ext_skel_ng/php_function.php +++ b/scripts/ext_skel_ng/php_function.php @@ -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; |