【发布时间】:2014-02-16 08:36:19
【问题描述】:
我编写了一个解析器,它可以像 lex 和 yacc 一样分析代码并减少它(几乎)。
我想知道这件事的一个方面。如果我有一组规则如下:
unary: IDENTIFIER
| IDENTIFIER '(' expr_list ')'
只要找到标识符,就可以减少只有 IDENTIFIER 的第一条规则。但是,只有在输入还包括括号之间的有效表达式列表时,才能减少第二条规则。
在这种情况下,解析器应该如何工作?
如果我立即减少第一个标识符,我可以保留结果并在我意识到第二个规则确实匹配时将其丢弃。如果第二条规则不匹配,那么我可以返回早期减少的结果。
这也意味着如果第二条规则适用,两个归约函数都将被调用。
我们是否希望保留早期减少并仅在第二条更长的规则适用时才应用它?
对于那些感兴趣的人,我将我的解析器语法的更完整版本放在这个答案中:https://codereview.stackexchange.com/questions/41769/numeric-expression-parser-calculator/41786#41786
【问题讨论】:
标签: parsing software-design yacc