【发布时间】:2013-04-13 11:21:41
【问题描述】:
为 LR 系列解析生成器(例如 YACC、BISON 等)考虑这样的语法规则:
Nonterminal : [ lookahead not in {Terminal1, ..., TerminalN} ] Rule ;
这是一个普通的规则,除了它有一个限制:用这个规则产生的短语不能以Terminal1, ..., TerminalN开头。 (当然,这个规则可以用一套常用的规则来代替,但它会导致更大的语法)。这对于解决冲突很有用。
问题是,是否存在接受此类限制的 LR 表构造算法的修改?在我看来,这样的修改是可能的(如优先关系)。
当然,它可以在运行时检查,但我的意思是编译时检查(在构建解析表时执行的检查,如 yacc 中的 %prec、%left、%right 和 %nonassoc 指令兼容的发电机。)
【问题讨论】:
标签: parsing generator conflict resolve negative-lookahead