Antlr4指令关键字和最长语句匹配
我正试图写语法,但我发现了一个问题,我不太确定如何“优雅地”解决 问题是我将'bro'作为保留指令关键字,它后面可以(或不可以)跟一个谓词语句。例如:“兄弟”或“兄弟” 现在的问题是,当前“bro_t”与ID的定义匹配,而“bro”本身就是一个标记,而且“bro_t”显然比“bro”长,因此解析器将该语句与ID匹配,解析失败。我提出的解决方案是同时保留“bro_t”和“bro_f”,但对于整个指令集来说,这将相对耗时。我正在研究的另一个解决方案是通配符运算符,但我不知道它们是否适用于这里,如果适用,如何应用它们 语法:Antlr4指令关键字和最长语句匹配,antlr,antlr4,lexer,Antlr,Antlr4,Lexer,我正试图写语法,但我发现了一个问题,我不太确定如何“优雅地”解决 问题是我将'bro'作为保留指令关键字,它后面可以(或不可以)跟一个谓词语句。例如:“兄弟”或“兄弟” 现在的问题是,当前“bro_t”与ID的定义匹配,而“bro”本身就是一个标记,而且“bro_t”显然比“bro”长,因此解析器将该语句与ID匹配,解析失败。我提出的解决方案是同时保留“bro_t”和“bro_f”,但对于整个指令集来说,这将相对耗时。我正在研究的另一个解决方案是通配符运算符,但我不知道它们是否适用于这里,如果适
predicate
: '_t' '<' register '>' | '_f' '<' register '>' | ;
operation
: 'bro' predicate ;
ID: ('a' .. 'z' | 'A' .. 'Z' | '_') ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' | '$' | '.')* ;
谓词
:“|t”“|”“|f”“|”;
活动
:'bro'谓词;
ID:('a'..'z'|'a'..'z'|'|')('a'..'z'|'a'..'z'|'0'..'9'|'|'$'|')*;
为什么不:
operation
: BRO '<' register '>'
;
BRO : 'bro' ( '_' [a-z]+ )?
ID : [a-zA-Z_] [a-zA-Z0-9_$.]*;
操作
:兄弟“
;
兄弟:'兄弟'('.'[a-z]+)?
ID:[a-zA-Z][a-zA-Z0-9.]*;
为什么不:
operation
: BRO '<' register '>'
;
BRO : 'bro' ( '_' [a-z]+ )?
ID : [a-zA-Z_] [a-zA-Z0-9_$.]*;
操作
:兄弟“
;
兄弟:'兄弟'('.'[a-z]+)?
ID:[a-zA-Z][a-zA-Z0-9.]*;
?