我可以添加无法在词法分析器规则中应用的语法词吗?

问题描述 投票:0回答:1

我有类似语法:

assignment: NAME ':=' (value | operation | boolean_value);
NAME: [a-zA-Z]+;

而且我想编程true := 4是错误的,但不是。

我想在语法上说单词true不能用作NAME

antlr grammar lexer
1个回答
1
投票

然后将其定义为关键字:

assignment: NAME ':=' (value | operation | boolean_value);

TRUE : 'true'; 
NAME : [a-zA-Z]+;

或在a listener or visitor中执行语义检查。


0
投票

[超级,它可以帮助我使用关键字truefalse。但是我也有关键字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这样的命令不是分配类型。有没有语义检查的解决方案吗?

© www.soinside.com 2019 - 2024. All rights reserved.