用野牛解析

时间:2009-10-05 20:32:20

标签: c yacc bison

我买了Flex&来自O'Reilly的Bison,但是我在实现解析器方面遇到了一些麻烦(将事情分解为令牌并不是什么大问题。)

假设我有一个巨大的二进制字符串,我需要做的是将这些位加在一起 ​​- 每一位都是一个标记:

 [0-1] { return NUMBER;}

1101010111111

或者就此而言,没有“操作”的令牌集合。

这样的语法是否正确?

calclist :
         | calclist expr EOL {eval($2)}
expr: NUMBER
      |expr NUMBER { $$=$1+$2 }

还是有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

您的示例lex规则“[0-1] {return NUMBER;}”未设置yylval,因此如果您在语法中使用该值(正如您在规则中所做的那样“expr NUMBER {$$ = $ 1+ $ 2;}“)你会得到垃圾。

一般来说,你所做的是正确的,尽管你所选择的任务是如此微不足道,以至于lex / bison严重过度杀伤。

相关问题