From: Hartmut Holzgraefe Date: Sat, 21 Jun 2003 19:28:19 +0000 (+0000) Subject: thoughts about a new proto parser ... X-Git-Tag: RELEASE_1_0_2~110 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ba8e371db1fdd31f88700d3464df7c331389326d;p=php thoughts about a new proto parser ... --- 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;