我从O'Reilly那里买了Flex&Bison,但是我在实现解析器时遇到了一些麻烦(把东西分解成令牌没什么大不了的)。
假设我有一个巨大的二进制字符串,我需要做的是将这些位相加—每个位都是一个标记:

 [0-1] { return NUMBER;}

一兆一千零一十亿一千零一十一万一千一百一十一
或者是没有“操作”的令牌集合。
这样的语法是正确的吗?
calclist :
         | calclist expr EOL {eval($2)}
expr: NUMBER
      |expr NUMBER { $$=$1+$2 }

还是有更好的办法?

最佳答案

你的示例lex规则“[0-1]{return NUMBER;}”没有设置yylval,所以如果你在语法中使用这个值(就像你在规则“expr NUMBER{$$=$1+$2;}”中所做的那样),你会得到垃圾。
总的来说,你所做的是正确的,尽管你所选择的任务是如此的琐碎以至于lex/bison是严重的过度杀戮。

关于c - 用野牛解析,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1522230/

10-11 22:36
查看更多