%token T_LNUMBER
%token T_DNUMBER
%token T_STRING
+%token T_STRING_VARNAME
%token T_VARIABLE
%token T_NUM_STRING
%token T_INLINE_HTML
scalar:
T_STRING { do_fetch_constant(&$$, &$1, ZEND_RT CLS_CC); }
+ | T_STRING_VARNAME { $$ = $1; }
| common_scalar { $$ = $1; }
| '"' encaps_list '"' { $$ = $2; }
| '\'' encaps_list '\'' { $$ = $2; }
%x BACKQUOTE
%x HEREDOC
%x LOOKING_FOR_PROPERTY
+%x LOOKING_FOR_VARNAME
%option stack
%{
<DOUBLE_QUOTES,BACKQUOTE,HEREDOC>"${" {
- yy_push_state(IN_SCRIPTING);
+ yy_push_state(LOOKING_FOR_VARNAME);
return T_DOLLAR_OPEN_CURLY_BRACES;
}
}
+<LOOKING_FOR_VARNAME>{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);
+ return T_STRING_VARNAME;
+}
+
+
+<LOOKING_FOR_VARNAME>. {
+ /*yyless(1);*/
+ unput(yytext[0]);
+ yy_pop_state();
+ yy_push_state(IN_SCRIPTING);
+}
+
<IN_SCRIPTING>{LNUM}|{HNUM} {
errno = 0;
return T_CURLY_OPEN;
}
+
<SINGLE_QUOTE>"\\'" {
zendlval->value.chval='\'';
return T_CHARACTER;