1

我从 O'Reilly 购买了 Flex & Bison,但我在实现解析器时遇到了一些麻烦(将事物分解为令牌没什么大不了的)。

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

 [0-1] { return NUMBER;}

1101010111111

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

这样的语法是否正确?

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

或者有更好的方法吗?

4

1 回答 1

2

您的示例 lex 规则 "[0-1] { return NUMBER; }" 没有设置 yylval,所以如果您在语法中使用该值(就像您在规则 "expr NUMBER { $$=$1+$2; } ") 你会得到垃圾。

一般来说,您所做的事情是正确的,尽管您选择的任务是如此微不足道,以至于 lex/bison 是严重的矫枉过正。

于 2009-10-05T20:38:49.367 回答