MKS Yacc 支持他们的网站称为“选择首选项语法”的符号。它没有说明,但它由方括号中的标记组成,可选地带有插入符号,它表示特定标记需要遵循或不遵循其余规则:
non_terminal: TOKEN1 non_terminal2 TOKEN2 [TOKEN3]
non_terminal: TOKEN1 non_terminal2 TOKEN2 [^TOKEN3]
(我不清楚括号中的项目是否可以是非终端。我看到的使用符号的代码总是使用一个标记或几个空格分隔的标记,而不是非终端。)
是否有人知道提供相同支持(符号可以不同 - 功能不能)的替代 Yacc 兼容系统(最好是开源),在 Unix 或 Linux 机器上运行,最好以源格式提供?
(MKS Yacc 在处理错误和调整错误行为方面也提供了一些灵活性。可以使用的一种方法是,当关键字在被视为关键字时毫无意义的位置遇到时,将其视为标识符。我是能够将其改造成byacc
- Berkeley Yacc - 但我没有花足够的时间来研究如何处理“选择偏好”。)