Antlr 我的语法标识符关键字作为标识符
我试图解析雅加达表达式语言中的表达式。总之,它是一个简化的Java表达式,并添加了一些内容:Antlr 我的语法标识符关键字作为标识符,antlr,antlr4,Antlr,Antlr4,我试图解析雅加达表达式语言中的表达式。总之,它是一个简化的Java表达式,并添加了一些内容: 支持创建地图,如:{“foo”:“bar} 支持创建列表和集合,如:[1,2,3,4]{1,2,3,4} 使用一些标识符而不是符号,例如:foo gt bar(foo>bar),foo mod bar(foo%bar),等等 我在最后一点上苦苦挣扎,它总是将“mod”、“gt”、“ge”理解为标识符,而不是使用带有“%”、“>”、“>=”的表达式 我是ANTLR的新手。我的语法基于中的Java语法和
- 支持创建地图,如:
{“foo”:“bar}
- 支持创建列表和集合,如:
[1,2,3,4]
{1,2,3,4}
- 使用一些标识符而不是符号,例如:
(foo gt bar
),foo>bar
(foo mod bar
,等等foo%bar)
|表达式bop=(“=”|“>”|“将它们的词法规则移动到
标识符的词法规则之前
如果ANTLR有多个Lexer规则匹配相同长度的输入,它将选择语法中匹配的第一个规则
例如,“mod”由Identifier
和MOD1
匹配,但是Identifier
是第一位,所以它选择Identifier
。将MOD1
规则移动到Identifier
之前,它将匹配MOD1
----
顺便说一句,除非您关心“%”和“mod”具有不同的令牌值,否则您可以只定义一个规则:
MOD: ‘%’ | ‘mod’;
如果您需要,您仍然可以获得令牌文本,但它会,您可以在解析器规则中指定MOD
,而不是(MOD0 | MOD1)
非常感谢您,您不知道我在这方面花了多少时间。
MOD: ‘%’ | ‘mod’;