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