我是 Antlr4 的新手。
有g4语法规则:
Function
: first
| second
| third
;
first
: FIRST'(' (STRING) (',' firstMode)? ')'
;
firstMode
: A
| B
;
A
: '"' F I R S T '"'
;
B
: '"'F I R S T D A Y'"'
;
STRING
: '"' .*? '"'
;
我希望“FIRST”在 FIRST("string", "FIRST") 上下文中为 A 通常当我写“FIRST”或“FIRST”或类似的东西时,我希望“FIRST”是字符串类型。如何得到我想要的?
一定数量的输入字符无法标记为 2 种不同的标记类型。因此输入
"first"
将始终成为 A
标记,因为它是在 STRING
标记之前定义的。
如果你想以多种方式识别这些东西,请在解析器中这样做:
first
: FIRST '(' string (',' firstMode)? ')'
;
string
: A
| STRING
;
A
: '"' F I R S T '"'
;
STRING
: '"' .*? '"'
;
测试语法:
grammar T;
parse
: first EOF
;
first
: FIRST '(' string ( ',' firstMode )? ')'
;
string
: FIRST
| FIRSTDAY
| STRING
;
firstMode
: FIRST
| FIRSTDAY
;
FIRST
: '"' F I R S T '"'
;
FIRSTDAY
: '"' F I R S T D A Y '"'
;
STRING
: '"' .*? '"'
;
SPACES
: [ \t\r\n]+ -> skip
;
F : [fF];
I : [iI];
R : [rR];
S : [sS];
T : [tT];
D : [dD];
A : [aA];
Y : [yY];
使用输入
"FIRST"("FIRSTDAY", "FIRST")
,得到以下解析树: