0

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

IF LPAREN condition RPAREN LBRACE stmtlist RBRACE ELSE LBRACE stmtlist RBRACE

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

谢谢,

4

1 回答 1

0

您将不得不继续解析,因为您需要找到第二个 ; 包围的块的结尾RBRACE;换句话说,您需要解析以找到下一条语句的开头。

也就是说,当您分析解析的结果时(生成代码,构造 AST,无论您需要做什么),如果您可以确定condition始终计算结果为true(也许是表达式1 = 1),那么您可以禁止生成代码第二个stmtlist

更新:

您的语法(您的语言的语法)是非程序指定的,因此您没有地方附加条件逻辑。

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

于 2013-09-27T13:39:26.950 回答