首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让antlr3解析“向前”?

如何让antlr3解析“向前”?
EN

Stack Overflow用户
提问于 2011-02-22 02:48:36
回答 2查看 119关注 0票数 3

我正在尝试用Antlr3解析以下语法:

代码语言:javascript
复制
String...
java.lang.String
java.lang.Object...

这是我的.g文件(其中的一部分):

代码语言:javascript
复制
doc: name DOTS? EOF;
name: ATOM ('.' ATOM)*;
ATOM: ('a' .. 'z' | 'A' .. 'Z')+;
DOTS: '...';

它不起作用。Antlr3将ATOM之后的'.'视为name的一部分,而不是DOTS的开始。我该怎么解决它呢?

EN

回答 2

Stack Overflow用户

发布于 2011-02-22 03:48:45

当我使用你的语法时:

代码语言:javascript
复制
grammar T;

parse : doc+  EOF;
doc   : name DOTS?;
name  : ATOM ('.' ATOM)*;
ATOM  : ('a' .. 'z' | 'A' .. 'Z')+;
DOTS  : '...';
WS    : (' ' | '\n') {skip();};

要解析源代码,请执行以下操作:

代码语言:javascript
复制
String...
java.lang.String
java.lang.Object...

我得到了下面的解析树:

所以,我不确定问题到底是什么:它似乎做了你想做的事情。

票数 2
EN

Stack Overflow用户

发布于 2011-02-22 03:39:17

像这样的东西可以吗?我相信有更好的方法来表达你所需要的语法。我假设想要匹配最后一个原子之后的任意数量的点作为点。

代码语言:javascript
复制
doc:    
     name dots EOF;

name: ATOM (DOT ATOM)*;

dots    :   
    DOT*;

DOT :   '.';
ATOM: ('a' .. 'z' | 'A' .. 'Z')+; 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5069951

复制
相关文章

相似问题

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