就像标题所说,我想在yacc或bison语法文件中启用/禁用某些语法规则。
有办法吗?
答案 0 :(得分:2)
如果您的意思是,在编译时,yacc使用标准的C /* */
注释语法。
如果您的意思是,在运行时,您仍然需要使用您拥有的表,因此他们需要将整个语法包含在可选短语中。
所以我建议制作一个假的终端符号。可选的规则将在假终端之前。如果您包含可选制作,则只能返回此终端。
这种方法的变体将涉及定义实际存在的真实终端的两个版本。这仅适用于带有终端的字符串的语法,但如果您有这样的输入,则一个终端可以表示一组规则,另一个终端可能出现在两组规则中,即:
T_A dynamic_phrase_in_grammar;
always_on static_phrase_in_grammar;
always_on: T_A | T_B;
因此,要启用动态短语,将真实终端作为T_A返回,以禁用它,返回为T_B。