2

在语义操作中引发异常后,是否可以回退到其他规则?就像下面的(人为的)场景:

var = /[a-zA-Z]+/;
keyword = 'for' | 'in';
a = var:var | keyword:keyword;

def a(ast):
    if (ast.var not in symbolTable):
        raise Exception()

并且当引发异常时,解析将继续使用“关键字”规则。我知道@@keyword 功能,但我想在运行时声明关键字(我的解析器是用于具有用户定义运算符的编程语言)。

4

1 回答 1

2

如果语义代码 raise tatsu.exceptions.FailedSemantics,异常将被完全视为 a ParseException,因此将恢复正常的解析控制流。

于 2020-01-09T13:15:46.223 回答