我有类似语法:
assignment: NAME ':=' (value | operation | boolean_value);
NAME: [a-zA-Z]+;
而且我想编程true := 4
是错误的,但不是。
我想在语法上说单词true
不能用作NAME
。
然后将其定义为关键字:
assignment: NAME ':=' (value | operation | boolean_value);
TRUE : 'true';
NAME : [a-zA-Z]+;
或在a listener or visitor中执行语义检查。
[超级,它可以帮助我使用关键字true
和false
。但是我也有关键字skip
。
command: assignment | if_condition | while_loop | comparison | operation | SKIP_RULE;
assignment: NAME ':=' (value | operation | boolean_value);
TRUE: 'true';
FALSE: 'false';
SKIP_RULE: 'skip';
如果输入命令:skip := 6
。 ANTLR查找关键字skip
,并忽略其余命令。我希望像skip := 6
这样的命令不是分配类型。有没有语义检查的解决方案吗?