如何在lex / yacc中删除我不关心的文本?

时间:2012-12-12 09:57:34

标签: parsing yacc lex

我正在使用python lex / yacc(PLY)来分析文本文件。

基本上,我需要关注整篇文章中的部分文字。

例如,我只关心整个文本中a = a + NUM的模式(表达式)。

  [JUNKS] a = a + 1; [JUNKS] a = a + 2; [JUNKS]

真正的整篇文章可能是这样的:

a;ldfjkadl;skfjas;lkfja; a = a+1; a;dfja;lkfja;ldfjadlf a = a + 12; a;kdfj;af

我对我感兴趣的表达的规则是:

my_expr : ID EQ ID PLUS NUM

如何编写正确的lex / yacc规则来过滤掉这些垃圾字符串?除了“my_expr”规则之外,请不要使用各种字符制作任何字符串。我做了很多尝试,但还没有找到办法。

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

我建议在词法分析器中过滤它们,但是JUNKS有点复杂。看看这样的语法是否适合你: -

stmt: ID stmt 
    | ';' stmt
    | expr
    ;

expr: ID '=' ID '+' NUM
    ;

答案 1 :(得分:0)

我想出了这样做的方法。

只需使用“状态”即可跳过垃圾箱。