我想编写yacc语法来解析语句,如下所示
START
statement1
statement2
END
START
statement3
END
START
statement4
END
或
START
statement1
statement2
XYZ (2)
START
statement3
statement4
XYZ (1)
END
statement5
XYZ (3)
END
依旧......
可以有任意数量的此类START-END集。
每个START应该有一个END.if XYZ出现在(1)然后它也应该出现在(2)和(3)。但是如果XYZ出现在(2)和(3),它可能会或可能不会出现在(1)。这意味着最里面的START-END集可能有也可能没有XYZ .. 我该如何为这种模式编写语法?
答案 0 :(得分:1)
使用此:
计划 - >小号
S - > S START语句END | ;
陈述 - >声明声明| ;
声明 - > NormalStatement | XYZ;
现在只需使用计数器来确保语法中的XYZ存在模式。您可以在yacc文件中的END
前面查看它,因为您可能知道如何。