From: Zeev Suraski Date: Fri, 21 May 1999 17:31:49 +0000 (+0000) Subject: * Fix the comments issue. yymore() worked like a charm. X-Git-Tag: BEFORE_PHP4_APACHE_MODULE_CHANGE~10 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f33c22c05548486d34bbe02d548cdfd680985f08;p=php * Fix the comments issue. yymore() worked like a charm. * Change all flex states to be prefixed with ST_ --- diff --git a/Zend/zend-scanner.l b/Zend/zend-scanner.l index a13ae4a545..37d10d05f9 100644 --- a/Zend/zend-scanner.l +++ b/Zend/zend-scanner.l @@ -18,13 +18,14 @@ %} -%x IN_SCRIPTING -%x DOUBLE_QUOTES -%x SINGLE_QUOTE -%x BACKQUOTE -%x HEREDOC -%x LOOKING_FOR_PROPERTY -%x LOOKING_FOR_VARNAME +%x ST_IN_SCRIPTING +%x ST_DOUBLE_QUOTES +%x ST_SINGLE_QUOTE +%x ST_BACKQUOTE +%x ST_HEREDOC +%x ST_LOOKING_FOR_PROPERTY +%x ST_LOOKING_FOR_VARNAME +%x ST_COMMENT %option stack %{ @@ -368,9 +369,9 @@ zend_op_array *compile_string(zval *source_string CLS_DC) } else { CG(active_op_array) = op_array; #ifndef ZTS - BEGIN(IN_SCRIPTING); + BEGIN(ST_IN_SCRIPTING); #else - CG(ZFL)->BeginState(IN_SCRIPTING); + CG(ZFL)->BeginState(ST_IN_SCRIPTING); #endif compiler_result = zendparse(CLS_C); restore_lexical_state(&original_lex_state CLS_CC); @@ -559,124 +560,124 @@ ESCAPED_AND_WHITESPACE [\n\t\r #'.:;,()|^&+-/*=%!~<>?@]+ %option noyywrap %% -"exit" { +"exit" { return T_EXIT; } -"die" { +"die" { return T_EXIT; } -"old_function" { +"old_function" { return T_OLD_FUNCTION; } -"function"|"cfunction" { +"function"|"cfunction" { return T_FUNCTION; } -"const" { +"const" { return T_CONST; } -"return" { +"return" { return T_RETURN; } -"if" { +"if" { return T_IF; } -"elseif" { +"elseif" { return T_ELSEIF; } -"endif" { +"endif" { return T_ENDIF; } -"else" { +"else" { return T_ELSE; } -"while" { +"while" { return T_WHILE; } -"endwhile" { +"endwhile" { return T_ENDWHILE; } -"do" { +"do" { return T_DO; } -"for" { +"for" { return T_FOR; } -"endfor" { +"endfor" { return T_ENDFOR; } -"foreach" { +"foreach" { return T_FOREACH; } -"endforeach" { +"endforeach" { return T_ENDFOREACH; } -"as" { +"as" { return T_AS; } -"switch" { +"switch" { return T_SWITCH; } -"endswitch" { +"endswitch" { return T_ENDSWITCH; } -"case" { +"case" { return T_CASE; } -"default" { +"default" { return T_DEFAULT; } -"break" { +"break" { return T_BREAK; } -"continue" { +"continue" { return T_CONTINUE; } -"echo" { +"echo" { return T_ECHO; } -"print" { +"print" { return T_PRINT; } -"class" { +"class" { return T_CLASS; } -"extends" { +"extends" { return T_EXTENDS; } -"->" { - yy_push_state(LOOKING_FOR_PROPERTY); +"->" { + yy_push_state(ST_LOOKING_FOR_PROPERTY); return T_OBJECT_OPERATOR; } -{LABEL} { +{LABEL} { yy_pop_state(); zendlval->value.str.val = (char *)estrndup(yytext, yyleng); zendlval->value.str.len = yyleng; @@ -684,203 +685,203 @@ ESCAPED_AND_WHITESPACE [\n\t\r #'.:;,()|^&+-/*=%!~<>?@]+ return T_STRING; } -. { +. { /*unput(yytext[0]);*/ yyless(0); yy_pop_state(); } -"::" { +"::" { return T_PAAMAYIM_NEKUDOTAYIM; } -"new" { +"new" { return T_NEW; } -"var" { +"var" { return T_VAR; } -"("{TABS_AND_SPACES}("int"|"integer"){TABS_AND_SPACES}")" { +"("{TABS_AND_SPACES}("int"|"integer"){TABS_AND_SPACES}")" { return T_INT_CAST; } -"("{TABS_AND_SPACES}("real"|"double"|"float"){TABS_AND_SPACES}")" { +"("{TABS_AND_SPACES}("real"|"double"|"float"){TABS_AND_SPACES}")" { return T_DOUBLE_CAST; } -"("{TABS_AND_SPACES}"string"{TABS_AND_SPACES}")" { +"("{TABS_AND_SPACES}"string"{TABS_AND_SPACES}")" { return T_STRING_CAST; } -"("{TABS_AND_SPACES}"array"{TABS_AND_SPACES}")" { +"("{TABS_AND_SPACES}"array"{TABS_AND_SPACES}")" { return T_ARRAY_CAST; } -"("{TABS_AND_SPACES}"object"{TABS_AND_SPACES}")" { +"("{TABS_AND_SPACES}"object"{TABS_AND_SPACES}")" { return T_OBJECT_CAST; } -"eval" { +"eval" { return T_EVAL; } -"include" { +"include" { return T_INCLUDE; } -"require" { +"require" { return T_REQUIRE; } -"global" { +"global" { return T_GLOBAL; } -"isset" { +"isset" { return T_ISSET; } -"empty" { +"empty" { return T_EMPTY; } -"static" { +"static" { return T_STATIC; } -"unset" { +"unset" { return T_UNSET; } -"=>" { +"=>" { return T_DOUBLE_ARROW; } -"list" { +"list" { return T_LIST; } -"array" { +"array" { return T_ARRAY; } -"++" { +"++" { return T_INC; } -"--" { +"--" { return T_DEC; } -"==" { +"==" { return T_IS_EQUAL; } -"!="|"<>" { +"!="|"<>" { return T_IS_NOT_EQUAL; } -"<=" { +"<=" { return T_IS_SMALLER_OR_EQUAL; } -">=" { +">=" { return T_IS_GREATER_OR_EQUAL; } -"+=" { +"+=" { return T_PLUS_EQUAL; } -"-=" { +"-=" { return T_MINUS_EQUAL; } -"*=" { +"*=" { return T_MUL_EQUAL; } -"/=" { +"/=" { return T_DIV_EQUAL; } -".=" { +".=" { return T_CONCAT_EQUAL; } -"%=" { +"%=" { return T_MOD_EQUAL; } -"<<=" { +"<<=" { return T_SL_EQUAL; } -">>=" { +">>=" { return T_SR_EQUAL; } -"&=" { +"&=" { return T_AND_EQUAL; } -"|=" { +"|=" { return T_OR_EQUAL; } -"^=" { +"^=" { return XT_OR_EQUAL; } -"||" { +"||" { return T_BOOLEAN_OR; } -"&&" { +"&&" { return T_BOOLEAN_AND; } -"OR" { +"OR" { return T_LOGICAL_OR; } -"AND" { +"AND" { return T_LOGICAL_AND; } -"XOR" { +"XOR" { return T_LOGICAL_XOR; } -"<<" { +"<<" { return T_SL; } -">>" { +">>" { return T_SR; } -{TOKENS} { +{TOKENS} { return yytext[0]; } -"{" { - yy_push_state(IN_SCRIPTING); +"{" { + yy_push_state(ST_IN_SCRIPTING); return '{'; } -"${" { - yy_push_state(LOOKING_FOR_VARNAME); +"${" { + yy_push_state(ST_LOOKING_FOR_VARNAME); return T_DOLLAR_OPEN_CURLY_BRACES; } -"}" { +"}" { /* This is a temporary fix which is dependant on flex and it's implementation */ if (yy_start_stack_ptr) { yy_pop_state(); @@ -889,25 +890,25 @@ ESCAPED_AND_WHITESPACE [\n\t\r #'.:;,()|^&+-/*=%!~<>?@]+ } -{LABEL} { +{LABEL} { zendlval->value.str.val = (char *) estrndup(yytext, yyleng); zendlval->value.str.len = yyleng; zendlval->type = IS_STRING; yy_pop_state(); - yy_push_state(IN_SCRIPTING); + yy_push_state(ST_IN_SCRIPTING); return T_STRING_VARNAME; } -. { +. { /*unput(yytext[0]);*/ yyless(0); yy_pop_state(); - yy_push_state(IN_SCRIPTING); + yy_push_state(ST_IN_SCRIPTING); } -{LNUM}|{HNUM} { +{LNUM}|{HNUM} { errno = 0; zendlval->value.lval = strtol(yytext, NULL, 0); if (errno == ERANGE) { /* overflow */ @@ -920,26 +921,26 @@ ESCAPED_AND_WHITESPACE [\n\t\r #'.:;,()|^&+-/*=%!~<>?@]+ } } -{LNUM}|{HNUM} { /* treat numbers (almost) as strings inside encapsulated strings */ +{LNUM}|{HNUM} { /* treat numbers (almost) as strings inside encapsulated strings */ zendlval->value.str.val = (char *)estrndup(yytext, yyleng); zendlval->value.str.len = yyleng; zendlval->type = IS_STRING; return T_NUM_STRING; } -{DNUM}|{EXPONENT_DNUM} { +{DNUM}|{EXPONENT_DNUM} { zendlval->value.dval = strtod(yytext,NULL); zendlval->type = IS_DOUBLE; return T_DNUMBER; } -"__LINE__" { +"__LINE__" { zendlval->value.lval = CG(zend_lineno); zendlval->type = IS_LONG; return T_LINE; } -"__FILE__" { +"__FILE__" { char *filename = zend_get_compiled_filename(); zendlval->value.str.len = strlen(filename); @@ -963,7 +964,7 @@ ESCAPED_AND_WHITESPACE [\n\t\r #'.:;,()|^&+-/*=%!~<>?@]+ zendlval->value.str.val = yytext; /* no copying - intentional */ zendlval->value.str.len = yyleng; zendlval->type = IS_STRING; - BEGIN(IN_SCRIPTING); + BEGIN(ST_IN_SCRIPTING); return T_OPEN_TAG; } else { zendlval->value.str.val = (char *) estrndup(yytext, yyleng); @@ -979,7 +980,7 @@ ESCAPED_AND_WHITESPACE [\n\t\r #'.:;,()|^&+-/*=%!~<>?@]+ zendlval->value.str.val = yytext; /* no copying - intentional */ zendlval->value.str.len = yyleng; zendlval->type = IS_STRING; - BEGIN(IN_SCRIPTING); + BEGIN(ST_IN_SCRIPTING); return T_OPEN_TAG_WITH_ECHO; } else { zendlval->value.str.val = (char *) estrndup(yytext, yyleng); @@ -995,7 +996,7 @@ ESCAPED_AND_WHITESPACE [\n\t\r #'.:;,()|^&+-/*=%!~<>?@]+ zendlval->value.str.val = yytext; /* no copying - intentional */ zendlval->value.str.len = yyleng; zendlval->type = IS_STRING; - BEGIN(IN_SCRIPTING); + BEGIN(ST_IN_SCRIPTING); } else { zendlval->value.str.val = (char *) estrndup(yytext, yyleng); zendlval->value.str.len = yyleng; @@ -1010,7 +1011,7 @@ ESCAPED_AND_WHITESPACE [\n\t\r #'.:;,()|^&+-/*=%!~<>?@]+ zendlval->value.str.len = yyleng; zendlval->type = IS_STRING; HANDLE_NEWLINE(yytext[yyleng-1]); - BEGIN(IN_SCRIPTING); + BEGIN(ST_IN_SCRIPTING); return T_OPEN_TAG; } @@ -1021,7 +1022,7 @@ ESCAPED_AND_WHITESPACE [\n\t\r #'.:;,()|^&+-/*=%!~<>?@]+ return T_PHP_TRACK_VARS; } -"$"{LABEL} { +"$"{LABEL} { zendlval->value.str.val = (char *)estrndup(yytext+1, yyleng-1); zendlval->value.str.len = yyleng-1; zendlval->type = IS_STRING; @@ -1029,7 +1030,7 @@ ESCAPED_AND_WHITESPACE [\n\t\r #'.:;,()|^&+-/*=%!~<>?@]+ } -{LABEL} { +{LABEL} { zendlval->value.str.val = (char *)estrndup(yytext, yyleng); zendlval->value.str.len = yyleng; zendlval->type = IS_STRING; @@ -1037,7 +1038,7 @@ ESCAPED_AND_WHITESPACE [\n\t\r #'.:;,()|^&+-/*=%!~<>?@]+ } -{LABEL} { +{LABEL} { zendlval->value.str.val = (char *)estrndup(yytext, yyleng); zendlval->value.str.len = yyleng; zendlval->type = IS_STRING; @@ -1045,7 +1046,7 @@ ESCAPED_AND_WHITESPACE [\n\t\r #'.:;,()|^&+-/*=%!~<>?@]+ } -{WHITESPACE} { +{WHITESPACE} { zendlval->value.str.val = yytext; /* no copying - intentional */ zendlval->value.str.len = yyleng; zendlval->type = IS_STRING; @@ -1054,18 +1055,31 @@ ESCAPED_AND_WHITESPACE [\n\t\r #'.:;,()|^&+-/*=%!~<>?@]+ } -([#]|"//")([^\n\r?]|"?"[^>\n\r])*("?\n"|"?\r\n")? { /* eat one line comments */ +([#]|"//")([^\n\r?]|"?"[^>\n\r])*("?\n"|"?\r\n")? { /* eat one line comments */ HANDLE_NEWLINE(yytext[yyleng-1]); return T_COMMENT; } -"/*"([^*]|"*"[^/])*(("*/")?) { - HANDLE_NEWLINES(yytext, yyleng); +"/*" { + BEGIN(ST_COMMENT); + yymore(); +} + + +[^*]+ { + yymore(); +} + +"*/" { + BEGIN(ST_IN_SCRIPTING); return T_COMMENT; } +"*" { + yymore(); +} -("?>"|"")([\n]|"\r\n")? { +("?>"|"")([\n]|"\r\n")? { zendlval->value.str.val = yytext; /* no copying - intentional */ zendlval->value.str.len = yyleng; zendlval->type = IS_STRING; @@ -1075,7 +1089,7 @@ ESCAPED_AND_WHITESPACE [\n\t\r #'.:;,()|^&+-/*=%!~<>?@]+ } -"%>"([\n]|"\r\n")? { +"%>"([\n]|"\r\n")? { zendlval->value.str.val = yytext; /* no copying - intentional */ zendlval->value.str.len = yyleng; zendlval->type = IS_STRING; @@ -1089,7 +1103,7 @@ ESCAPED_AND_WHITESPACE [\n\t\r #'.:;,()|^&+-/*=%!~<>?@]+ } -(["]([^$"\\]|("\\".))*["]) { +(["]([^$"\\]|("\\".))*["]) { register char *s, *t; char *end; @@ -1171,7 +1185,7 @@ ESCAPED_AND_WHITESPACE [\n\t\r #'.:;,()|^&+-/*=%!~<>?@]+ } -([']([^'\\]|("\\".))*[']) { +([']([^'\\]|("\\".))*[']) { register char *s, *t; char *end; @@ -1211,13 +1225,13 @@ ESCAPED_AND_WHITESPACE [\n\t\r #'.:;,()|^&+-/*=%!~<>?@]+ } -["] { - BEGIN(DOUBLE_QUOTES); +["] { + BEGIN(ST_DOUBLE_QUOTES); return '\"'; } -"<<<"{TABS_AND_SPACES}{LABEL}("\r")?"\n" { +"<<<"{TABS_AND_SPACES}{LABEL}("\r")?"\n" { char *s; CG(heredoc_len) = yyleng-3-1-(yytext[yyleng-2]=='\r'?1:0); s = yytext+3; @@ -1226,24 +1240,24 @@ ESCAPED_AND_WHITESPACE [\n\t\r #'.:;,()|^&+-/*=%!~<>?@]+ CG(heredoc_len)--; } CG(heredoc) = estrndup(s, CG(heredoc_len)); - BEGIN(HEREDOC); + BEGIN(ST_HEREDOC); return T_HEREDOC; } -[`] { - BEGIN(BACKQUOTE); +[`] { + BEGIN(ST_BACKQUOTE); return '`'; } -['] { - BEGIN(SINGLE_QUOTE); +['] { + BEGIN(ST_SINGLE_QUOTE); return '\''; } -^{LABEL}(";")?("\r")?"\n" { +^{LABEL}(";")?("\r")?"\n" { int label_len; unsigned char unput_semicolon; @@ -1267,7 +1281,7 @@ ESCAPED_AND_WHITESPACE [\n\t\r #'.:;,()|^&+-/*=%!~<>?@]+ efree(CG(heredoc)); CG(heredoc)=NULL; CG(heredoc_len)=0; - BEGIN(IN_SCRIPTING); + BEGIN(ST_IN_SCRIPTING); return T_HEREDOC; } else { zendlval->value.str.val = (char *)estrndup(yytext, yyleng); @@ -1278,7 +1292,7 @@ ESCAPED_AND_WHITESPACE [\n\t\r #'.:;,()|^&+-/*=%!~<>?@]+ } -{ESCAPED_AND_WHITESPACE} { +{ESCAPED_AND_WHITESPACE} { HANDLE_NEWLINES(yytext,yyleng); zendlval->value.str.val = (char *) estrndup(yytext, yyleng); zendlval->value.str.len = yyleng; @@ -1286,7 +1300,7 @@ ESCAPED_AND_WHITESPACE [\n\t\r #'.:;,()|^&+-/*=%!~<>?@]+ return T_ENCAPSED_AND_WHITESPACE; } -([^'\\]|\\[^'\\])+ { +([^'\\]|\\[^'\\])+ { HANDLE_NEWLINES(yytext,yyleng); zendlval->value.str.val = (char *) estrndup(yytext, yyleng); zendlval->value.str.len = yyleng; @@ -1295,7 +1309,7 @@ ESCAPED_AND_WHITESPACE [\n\t\r #'.:;,()|^&+-/*=%!~<>?@]+ } -[`]+ { +[`]+ { zendlval->value.str.val = (char *) estrndup(yytext, yyleng); zendlval->value.str.len = yyleng; zendlval->type = IS_STRING; @@ -1303,7 +1317,7 @@ ESCAPED_AND_WHITESPACE [\n\t\r #'.:;,()|^&+-/*=%!~<>?@]+ } -["]+ { +["]+ { zendlval->value.str.val = (char *) estrndup(yytext, yyleng); zendlval->value.str.len = yyleng; zendlval->type = IS_STRING; @@ -1311,7 +1325,7 @@ ESCAPED_AND_WHITESPACE [\n\t\r #'.:;,()|^&+-/*=%!~<>?@]+ } -"$"[^a-zA-Z_\x7f-\xff{] { +"$"[^a-zA-Z_\x7f-\xff{] { zendlval->value.chval = yytext[0]; if (yyleng == 2) { yyless(1); @@ -1323,51 +1337,51 @@ ESCAPED_AND_WHITESPACE [\n\t\r #'.:;,()|^&+-/*=%!~<>?@]+ } -{ENCAPSED_TOKENS} { +{ENCAPSED_TOKENS} { zendlval->value.chval = yytext[0]; return yytext[0]; } -"{$" { +"{$" { zendlval->value.chval = yytext[0]; - yy_push_state(IN_SCRIPTING); + yy_push_state(ST_IN_SCRIPTING); /*unput('$');*/ yyless(1); return T_CURLY_OPEN; } -"\\'" { +"\\'" { zendlval->value.chval='\''; return T_CHARACTER; } -"\\\\" { +"\\\\" { zendlval->value.chval='\\'; return T_CHARACTER; } -"\\\"" { +"\\\"" { zendlval->value.chval='"'; return T_CHARACTER; } -"\\`" { +"\\`" { zendlval->value.chval='`'; return T_CHARACTER; } -"\\"[0-7]{1,3} { +"\\"[0-7]{1,3} { zendlval->value.chval = (char) strtol (yytext+1, NULL, 8); return T_CHARACTER; } -"\\x"[0-9A-Fa-f]{1,2} { +"\\x"[0-9A-Fa-f]{1,2} { zendlval->value.chval = (char) strtol (yytext+2, NULL, 16); return T_CHARACTER; } -"\\". { +"\\". { switch (yytext[1]) { case 'n': zendlval->value.chval='\n'; @@ -1398,13 +1412,13 @@ ESCAPED_AND_WHITESPACE [\n\t\r #'.:;,()|^&+-/*=%!~<>?@]+ } -"\\$"|"\\{" { +"\\$"|"\\{" { zendlval->value.chval = yytext[1]; return T_CHARACTER; } -["'`]+ { +["'`]+ { zendlval->value.str.val = (char *) estrndup(yytext, yyleng); zendlval->value.str.len = yyleng; zendlval->type = IS_STRING; @@ -1412,29 +1426,29 @@ ESCAPED_AND_WHITESPACE [\n\t\r #'.:;,()|^&+-/*=%!~<>?@]+ } -["] { - BEGIN(IN_SCRIPTING); +["] { + BEGIN(ST_IN_SCRIPTING); return '\"'; } -[`] { - BEGIN(IN_SCRIPTING); +[`] { + BEGIN(ST_IN_SCRIPTING); return '`'; } -['] { - BEGIN(IN_SCRIPTING); +['] { + BEGIN(ST_IN_SCRIPTING); return '\''; } -<> { +<> { return 0; } -. { +. { zend_error(E_COMPILE_WARNING,"Unexpected character in input: '%c' (ASCII=%d) state=%d",yytext[0],yytext[0],YYSTATE); }