我试图在我的语法中使用@@keyword 和@name,但如果标记@name 的规则被注释,tatsu 似乎会忽略它。
我错过了什么吗?
为了重现该行为,我提供了以下示例:
这个有效:
import tatsu
GRAMMAR = '''
@@grammar::TestGrammar
@@keyword :: if var
@@whitespace :: /[\t ]+/
start =
var identifier ";" { var identifier ";" }* $
;
if = "if";
var = "var";
@name
identifier =
/[a-z]+/;
'''
if __name__ == '__main__':
import pprint
import json
from tatsu import parse
from tatsu.util import asjson
ast = parse(GRAMMAR, 'var xyz; var if;')
pprint.pprint(ast, indent=2, width=20)
不出所料,tatsu会报告
tatsu.exceptions.FailedParse: (1:16) "if" is a reserved word :
var xyz; var if;
^
如果我通过注释标识符规则
@name
identifier =
id:
/[a-z]+/;
相同的python程序将输出
( 'var',
{'id': 'xyz'},
';',
[ [ 'var',
{'id': 'if'},
';']])