首页
学习
活动
专区
圈层
工具
发布

ANTLR递归
EN

Stack Overflow用户
提问于 2011-11-26 22:17:29
回答 1查看 433关注 0票数 1

当我使用输入(3)执行下面的语法时,我得到了这个解析树:

它不能识别右括号。可能的问题是什么?

代码语言:javascript
复制
term 
    :  IDENT | '(' term ')'  | INTEGER
    ;

INTEGER : '0'..'9'+;
IDENT : ('a'..'z' | 'A'..'Z')('a'..'z' | 'A'..'Z' | '0'..'9')*;
WS : (' ' | '\t' | '\r' | '\n' | '\f')+{$channel = HIDDEN;};
EN

回答 1

Stack Overflow用户

发布于 2011-11-26 23:30:26

我认为这可能是UI中的错误。我认为解析器看到了)。您是否尝试过从Java调用解析器?

代码语言:javascript
复制
public static void main(String[] args)
    throws Exception
{
    // TODO Auto-generated method stub
    ANTLRStringStream strstrm = new ANTLRStringStream("(3)");
    ffLexer lex = new ffLexer(strstrm);
    CommonTokenStream tokStrm = new CommonTokenStream(lex);
    ffParser prs = new ffParser(tokStrm);
    prs.term();

}

如果将操作添加到术语规则中:

代码语言:javascript
复制
term 
    :  IDENT | a='('   term b=')'  {System.out.println($a.text + " " + $b.text);} | INTEGER
    ;

您应该会得到输出

代码语言:javascript
复制
( )

此外,如果您创建另一个解析器规则:

代码语言:javascript
复制
prog: term+;

然后向输入(3)(4)(5)提供预期的解析树

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

https://stackoverflow.com/questions/8279017

复制
相关文章

相似问题

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