0
我想写一个EPL解析器,所以我正在学习Flex和bison.I请尝试使用以下规则(SQL):野牛的减少没有工作
SELECT { cout<<"SELECT detected"<<endl;return SELECT; }
FROM { cout<<"FROM detected"<<endl;return FROM;}
[a-zA-Z][0-9a-zA-Z]* { cout<<"IDENTIFIER detected"<<endl;yylval.c=yytext;
return IDENTIFIER; }
'$' { return DOL;}
[ \t] { cout<<"space founded:"<<int(yytext[0])<<endl; }
\n { return EOL;}
. {}
和野牛规则是:
sel_stmt : {cout<<"VOID"<<endl;}
| SELECT identifier_expr FROM identifier_expr { cout<<"select statement founded"<<endl; }
;
identifier_expr : DOL IDENTIFIER {
$$=$2;
cout<<"ident_expr:"<<$$<<endl;
}
;
所有令牌和非终端有型 “的char *”
从标准输入输入是 “选择从$ $ ABC DDD” 当词法分析器返回的标记FROM在 reudction happend “标识_expr“动作,输出为 ”ident_expr:abc from“ 为什么会发生这种情况?
明白了。现在我使用_strdup制作yytext的副本,并按预期工作。感谢您的帮助。 – YenvY