YACC:停止解析特定路径

时间:2013-09-27 06:07:03

标签: parsing yacc ply

我正在使用Python PLY来解析特定语言。对于像这样的语法:

IF LPAREN condition RPAREN LBRACE stmtlist RBRACE ELSE LBRACE stmtlist RBRACE

当我知道condition值,说真,那么有没有办法停止解析stmtlist路径中的ELSE

谢谢,

1 个答案:

答案 0 :(得分:0)

您必须继续解析,因为您需要找到第二个RBRACE所包围的块的结尾;换句话说,你需要解析才能找到下一个语句的开头。

那就是说,当你分析解析的结果(生成代码,构造一个AST,无论你需要做什么)时,如果你能确定condition总是求值为true(也许是表达式1 = 1),然后您可以禁止为第二个stmtlist生成代码。

<强>更新

您的语法(您的语言的语法)是非程序性指定的,因此您无法附加条件逻辑。

另一方面,您指定在语法的特定语法元素匹配时要采取的语义操作,并且您可以在程序上执行此操作。在PLY中,您可以通过编码语法规则函数体来完成此操作。在与第二个stmtlist匹配的语法规则函数中,您可以根据您已经了解的有关输入程序的其他信息(编译语言处理器的输入)编写条件代码以跳过代码生成。 p>