From: James Moore Date: Tue, 12 Nov 2002 14:31:37 +0000 (+0000) Subject: Forgot the parsers and scanners X-Git-Tag: php-4.3.0RC1~80 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=48d27095a79be2d1904f3ce8c874c047d3263c80;p=php Forgot the parsers and scanners --- diff --git a/ext/w32api/w32api_function_definition_parser.y b/ext/w32api/w32api_function_definition_parser.y new file mode 100644 index 0000000000..70b9d66fb1 --- /dev/null +++ b/ext/w32api/w32api_function_definition_parser.y @@ -0,0 +1,67 @@ +%{ +/* + +----------------------------------------------------------------------+ + | PHP version 4.0 | + +----------------------------------------------------------------------+ + | Copyright (c) 1997-2001 The PHP Group | + +----------------------------------------------------------------------+ + | This source file is subject to version 2.02 of the PHP license, | + | that is bundled with this package in the file LICENSE, and is | + | available at through the world-wide-web at | + | http://www.php.net/license/2_02.txt. | + | If you did not receive a copy of the PHP license and are unable to | + | obtain it through the world-wide-web, please send a note to | + | license@php.net so we can mail you a copy immediately. | + +----------------------------------------------------------------------+ + | Authors: James Moore | + +----------------------------------------------------------------------+ + */ + +/* $Id$ */ + +#include +#include +#define WIN32_LEAN_AND_MEAN +#include +#include + +#include "php.h" +#include "php_ini.h" +#include "ext/standard/info.h" +#include "ext/standard/php_string.h" +#include "php_w32api.h" + + +#define YYSTYPE w32api_parser_function_definition_union +#define YYPARSE_PARAM fh + +int w32api_function_definition_lex(w32api_parser_function_definition_union *funcdef_lval); + +%} + +%pure_parser + +%token tFROM +%token tBYREF +%token tALIAS +%token tIDENTIFIER +%token tFILENAME + +%type argument argument_list + +%start funcdef + +%% + +funcdef: tIDENTIFIER tIDENTIFIER tALIAS tIDENTIFIER'(' argument_list ')' tFROM tFILENAME {((w32api_func_handle_ptr *)fh)->hnd = w32api_parser_load_alias_function($1, $2, $4, $6, $9);} + | tIDENTIFIER tIDENTIFIER '(' argument_list ')' tFROM tFILENAME {((w32api_func_handle_ptr *)fh)->hnd = w32api_parser_load_function($1, $2, $4, $7);} +; + +argument_list: argument ',' argument_list { $$ = w32api_parser_join_arguments($1, $3);} + | argument {$$ = $1;} + | {$$ = NULL} +; + +argument: tIDENTIFIER tIDENTIFIER { $$ = w32api_parser_make_argument_byval($1, $2); } + | tIDENTIFIER tBYREF tIDENTIFIER { $$ = w32api_parser_make_argument_byref($1, $3); } +; diff --git a/ext/w32api/w32api_function_definition_scanner.l b/ext/w32api/w32api_function_definition_scanner.l new file mode 100644 index 0000000000..aaf088404b --- /dev/null +++ b/ext/w32api/w32api_function_definition_scanner.l @@ -0,0 +1,63 @@ +%{ +/* + +----------------------------------------------------------------------+ + | PHP version 4.0 | + +----------------------------------------------------------------------+ + | Copyright (c) 1997-2001 The PHP Group | + +----------------------------------------------------------------------+ + | This source file is subject to version 2.02 of the PHP license, | + | that is bundled with this package in the file LICENSE, and is | + | available at through the world-wide-web at | + | http://www.php.net/license/2_02.txt. | + | If you did not receive a copy of the PHP license and are unable to | + | obtain it through the world-wide-web, please send a note to | + | license@php.net so we can mail you a copy immediately. | + +----------------------------------------------------------------------+ + | Authors: James Moore | + +----------------------------------------------------------------------+ + */ + +/* $Id$ */ + + +#include +#include +#define WIN32_LEAN_AND_MEAN +#include +#include + +#include "php.h" +#include "php_ini.h" +#include "ext/standard/info.h" +#include "ext/standard/php_string.h" +#include "php_w32api.h" +#include "w32api_function_definition_parser.h" + +#ifdef YYSTYPE +#undef YYSTYPE +#endif + +#define YYSTYPE w32api_parser_function_definition_union + +#define YY_DECL int w32api_function_definition_lex(w32api_parser_function_definition_union *funcdef_lval) + + +%} + +ID [A-Za-z][A-Za-z0-9_]* +FILENAME {ID}\.{ID} + +%option noyywrap + +%% + +"from" {return tFROM;} +"alias" {return tALIAS;} +"&" {return tBYREF;} +{FILENAME} {funcdef_lval->s = estrdup(yytext); return tFILENAME;} +{ID} {funcdef_lval->s = estrdup(yytext); return tIDENTIFIER;} +[ \r\t\n] /* Ignore Whitespace */ +. {return *yytext;} + +%% + diff --git a/ext/w32api/w32api_type_definition_parser.y b/ext/w32api/w32api_type_definition_parser.y new file mode 100644 index 0000000000..2e60a12b21 --- /dev/null +++ b/ext/w32api/w32api_type_definition_parser.y @@ -0,0 +1,67 @@ +%{ +/* + +----------------------------------------------------------------------+ + | PHP version 4.0 | + +----------------------------------------------------------------------+ + | Copyright (c) 1997-2001 The PHP Group | + +----------------------------------------------------------------------+ + | This source file is subject to version 2.02 of the PHP license, | + | that is bundled with this package in the file LICENSE, and is | + | available at through the world-wide-web at | + | http://www.php.net/license/2_02.txt. | + | If you did not receive a copy of the PHP license and are unable to | + | obtain it through the world-wide-web, please send a note to | + | license@php.net so we can mail you a copy immediately. | + +----------------------------------------------------------------------+ + | Authors: James Moore | + +----------------------------------------------------------------------+ + */ + +/* $Id$ */ + +#include +#include +#define WIN32_LEAN_AND_MEAN +#include +#include + +#include "php.h" +#include "php_ini.h" +#include "ext/standard/info.h" +#include "ext/standard/php_string.h" +#include "php_w32api.h" + +#define YYSTYPE w32api_parser_type_definition_union +#define YYPARSE_PARAM th + +int w32api_type_definition_lex(w32api_parser_type_definition_union *typedef_lval); + +%} + +%pure_parser + +%token tTYPEID +%token tBYREF + +%type value_list value + +%% + +start: + type_definition +; + +type_definition: + tTYPEID '{' value_list '}' {((w32api_type_handle_ptr *)th)->hnd = w32api_parser_register_type($1, $3);} +; + +value_list: + value ';' value_list {$$ = w32api_parser_type_join_values($1, $3);} + | value ';' {$$ = $1;} +; + +value: + tTYPEID tTYPEID {$$ = w32api_parser_type_make_byval_value($1, $2);} + | tTYPEID tBYREF tTYPEID {$$ = w32api_parser_type_make_byref_value($1, $3);} +; + diff --git a/ext/w32api/w32api_type_definition_scanner.l b/ext/w32api/w32api_type_definition_scanner.l new file mode 100644 index 0000000000..c6e89d0b2a --- /dev/null +++ b/ext/w32api/w32api_type_definition_scanner.l @@ -0,0 +1,56 @@ +%{ +/* + +----------------------------------------------------------------------+ + | PHP version 4.0 | + +----------------------------------------------------------------------+ + | Copyright (c) 1997-2001 The PHP Group | + +----------------------------------------------------------------------+ + | This source file is subject to version 2.02 of the PHP license, | + | that is bundled with this package in the file LICENSE, and is | + | available at through the world-wide-web at | + | http://www.php.net/license/2_02.txt. | + | If you did not receive a copy of the PHP license and are unable to | + | obtain it through the world-wide-web, please send a note to | + | license@php.net so we can mail you a copy immediately. | + +----------------------------------------------------------------------+ + | Authors: James Moore | + +----------------------------------------------------------------------+ + */ + +/* $Id$ */ + +#include +#include +#define WIN32_LEAN_AND_MEAN +#include +#include + +#include "php.h" +#include "php_ini.h" +#include "ext/standard/info.h" +#include "ext/standard/php_string.h" +#include "php_w32api.h" +#include "w32api_type_definition_parser.h" + +#ifdef YYSTYPE +#undef YYSTYPE +#endif + +#define YYSTYPE w32api_parser_type_definition_union + +#define YY_DECL int w32api_type_definition_lex(w32api_parser_type_definition_union *typedef_lval) + +%} + +TYPEID [A-Za-z][A-Za-z0-9_]* + +%option noyywrap + +%% + +"&" {return tBYREF;} +{TYPEID} {typedef_lval->s = estrdup(yytext); return tTYPEID;} +[ \r\t\n] /* Ignore Whitespace */ +. {return *yytext;} + +%% \ No newline at end of file