是否可以在语义上抛出异常后继续用其他规则解析?
Is it possible to continue parsing with other rules after an exception is raised in semantics?
是否可以在语义操作中引发异常后回退到其他规则?就像下面的(人为的)场景:
var = /[a-zA-Z]+/;
keyword = 'for' | 'in';
a = var:var | keyword:keyword;
def a(ast):
if (ast.var not in symbolTable):
raise Exception()
并且当引发异常时,解析将继续使用 'keyword' 规则。我知道 @@keyword 功能,但我想在运行时声明关键字(我的解析器是针对具有用户定义运算符的编程语言)。
如果语义代码引发 tatsu.exceptions.FailedSemantics
,异常将被完全视为 ParseException
,因此将恢复正常的解析控制流。
是否可以在语义操作中引发异常后回退到其他规则?就像下面的(人为的)场景:
var = /[a-zA-Z]+/;
keyword = 'for' | 'in';
a = var:var | keyword:keyword;
def a(ast):
if (ast.var not in symbolTable):
raise Exception()
并且当引发异常时,解析将继续使用 'keyword' 规则。我知道 @@keyword 功能,但我想在运行时声明关键字(我的解析器是针对具有用户定义运算符的编程语言)。
如果语义代码引发 tatsu.exceptions.FailedSemantics
,异常将被完全视为 ParseException
,因此将恢复正常的解析控制流。