首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Antlr4解析问题

Antlr4解析问题
EN

Stack Overflow用户
提问于 2018-01-31 07:30:20
回答 2查看 43关注 0票数 1

当我试图通过antlr-4.7.1-完成第一行工作时,我的message.expr文件与Zmes.g4语法文件一起工作,第二行没有反应。语法是

代码语言:javascript
复制
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是

代码语言:javascript
复制
MSG 100  'MESSAGE YU';
DEF: String Svar1,Int Intv1;`

当我这样跑的时候

代码语言:javascript
复制
grun Zmes prog -tree message.expr

(stat (message MSG 100 'MESSAGE YU‘)),没有第二反应。为什么会是。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-31 08:51:43

您的message应该在末尾包含';'

代码语言:javascript
复制
message :  'MSG'     MSGNUM    TEXT ';';

而且,在您的define规则中,您有'int ',它可能应该是'Int' (没有空格和大写的i)。

我会去做这样的事:

代码语言:javascript
复制
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;

它产生:

票数 1
EN

Stack Overflow用户

发布于 2018-02-28 06:44:42

如果要解析整个输入,还应该添加EOF。

代码语言:javascript
复制
prog    :   stat+ EOF;

here为什么。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48536757

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档