【发布时间】:2014-02-04 19:47:01
【问题描述】:
我正在尝试使用 Lex 和 Yacc 解析以下字符串输入,但没有成功。
"@user;一些随机文本;@另一个用户;一些其他随机文本"
我正在使用以下语法:
/* Lambda calculus grammar by Zach Carter */
%lex
%%
\s*\n\s* {/* ignore */}
";" { return 'SEP'; }
"@" { return 'AT'; }
[a-zA-Z]+ { return 'VAR'; }
<<EOF>> { return 'EOF'; }
/lex
%%
file
: expr EOF
{ return $expr; }
| EOF
;
expr
: AT expression
| expression
| SEP expression
;
expression
: VAR
{ $$ = yytext; }
;
你可以试试这个语法here:
我想要的结果是:
"@user;一些随机文本;@另一个用户;一些其他随机文本"
输出:
用户一些
随机文本
另一个用户
其他一些随机文本
【问题讨论】:
-
“你可以在这里试试这个语法”。呃……不,因为
AT is not defined. -
@Louis 这是我遇到的问题之一。如果您查看 lex 关键字,
"@" { return AT; }定义明确 -
了解 yacc/lex、bison/flex 有助于使用 jison,但 jison 并不是 bison(或 yacc 或其他任何东西)的替代品。吉森是它自己的东西。因此,适用于这些其他工具的东西不适用于 jison,包括
return AT。令人费解的是,你使用的是return 'VAR',而不是return VAR,那为什么是return AT? -
啊,很好看。这是固定的,但它仍然不起作用:(
标签: javascript parsing yacc lex jison