当我尝试通过antlr-4.7.1完成带有Zmes.g4语法文件的message.expr文件时,只有第一行有效,第二行没有反应。语法是
grammar Zmes;
prog : stat+;
stat : (message|define);
message : 'MSG' MSGNUM TEXT;
define : 'DEF:' ('String '|'int ') ID ( ',' ('String '|'Int ') ID)* ';';
fragment QUOTE : '\'';
MSGNUM : [0-9]+;
TEXT : QUOTE ~[']* QUOTE;
MODULE : [A-Z][A-Z][A-Z] ;
ID : [A-Z]([A-Za-z0-9_])*;
SKIPS : (' '|'\t'|'\r'?'\n'|'\r')+ -> skip;
和message.expr是
MSG 100 'MESSAGE YU';
DEF: String Svar1,Int Intv1;`
当我像这样跑时,在cmd上
grun Zmes prog -tree message.expr
(prog(stat(消息MSG 100'MESSAGE YU'))) 而且没有第二反应。为什么会这样。
答案 0 :(得分:1)
您的message
最后应包含';'
:
message : 'MSG' MSGNUM TEXT ';';
此外,在您的define
规则中,您有'int '
,其中'Int'
可能是i
(没有空格和资本grammar Zmes;
prog : stat+ EOF;
stat : (message | define) SCOL;
message : MSG MSGNUM TEXT;
define : DEF COL type ID (COMMA type ID)*;
type : STRING | INT;
MSG : 'MSG';
DEF : 'DEF';
STRING : 'String';
INT : 'Int';
COL : ':';
SCOL : ';';
COMMA : ',';
MSGNUM : [0-9]+;
TEXT : '\'' ~[']* '\'';
MODULE : [A-Z] [A-Z] [A-Z] ;
ID : [A-Z] [A-Za-z0-9_]*;
SKIPS : (' '|'\t'|'\r'?'\n'|'\r')+ -> skip;
)。
我会选择这样的事情:
Node1
产生:
答案 1 :(得分:1)