我正在使用Python PLY来解析特定语言。对于像这样的语法:
IF LPAREN condition RPAREN LBRACE stmtlist RBRACE ELSE LBRACE stmtlist RBRACE
当我知道condition
值,说真,那么有没有办法停止解析stmtlist
路径中的ELSE
?
谢谢,
答案 0 :(得分:0)
您必须继续解析,因为您需要找到第二个RBRACE
所包围的块的结尾;换句话说,你需要解析才能找到下一个语句的开头。
那就是说,当你分析解析的结果(生成代码,构造一个AST,无论你需要做什么)时,如果你能确定condition
总是求值为true
(也许是表达式1 = 1
),然后您可以禁止为第二个stmtlist
生成代码。
<强>更新强>
您的语法(您的语言的语法)是非程序性指定的,因此您无法附加条件逻辑。
另一方面,您指定在语法的特定语法元素匹配时要采取的语义操作,并且您可以在程序上执行此操作。在PLY中,您可以通过编码语法规则函数体来完成此操作。在与第二个stmtlist
匹配的语法规则函数中,您可以根据您已经了解的有关输入程序的其他信息(编译语言处理器的输入)编写条件代码以跳过代码生成。 p>