解析用户名和字符串



我正在尝试使用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
  |
  ;    

相关内容

  • 没有找到相关文章

最新更新