我正在尝试使用LEX和YACC来解析以下字符串输入。
; @user;一些随机文本;@Another用户;其他一些随机文本;
我正在使用以下语法:
/* Lambda calculus grammar by Zach Carter */
%lex
%%
s*ns* {/* 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; }
;
您可以在此处尝试此语法:
我想拥有的结果是:
; @user;一些随机文本;@Another用户;其他一些随机文本;
输出:
用户一些
随机文本
另一个用户
其他一些随机文本
"无成功"或"不起作用"不像对出现问题的确切描述那样有用。您的"输出"是错误的结果,还是您想看到的(如果后者,那么"用户某些"应该是一个实体的建议是有些怪异的)?很难猜测您的语言的结构真正旨在从您的问题中出发,而语法中缺乏任何递归结构表明,问题可能是从"无法创建语法来创建发电机会接受的"到"错误的"输出"。因此,这个答案可能是错误的,但也许会引起更好的描述。
/* Lambda calculus grammar by Zach Carter */
%lex
%%
s*ns* /* ignore */
s+ /* ignore */
";" { return 'SEP'; }
"@" { return 'AT'; }
[a-zA-Z]+ { return 'VAR'; }
<<EOF>> { return 'EOF'; }
/lex
%%
file
: things EOF
{ return $things; }
| EOF
;
things // can there be zero things?
: thing morethings
;
morethings
: SEP things
|
;
thing
: AT VAR
| text
;
text
: VAR moretext
;
moretext
: VAR moretext
|
;