当我试图通过antlr-4.7.1-完成第一行工作时,我的message.expr文件与Zmes.g4语法文件一起工作,第二行没有反应。语法是
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;`当我这样跑的时候
grun Zmes prog -tree message.expr(stat (message MSG 100 'MESSAGE YU‘)),没有第二反应。为什么会是。
发布于 2018-01-31 08:51:43
您的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;它产生:

发布于 2018-02-28 06:44:42
https://stackoverflow.com/questions/48536757
复制相似问题