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
