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