首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >简单抗误码

简单抗误码
EN

Stack Overflow用户
提问于 2011-07-06 09:54:21
回答 1查看 171关注 0票数 1

我从ANTLR开始,但是我遇到了一些错误,我真的不明白为什么。

这里你有我真正简单的语法

代码语言:javascript
复制
grammar Expr;
options {backtrack=true;}

@header {}

@members {}

expr returns [String s] 
    : (LETTER SPACE DIGIT | TKDC) {$s = $DIGIT.text + $TKDC.text;}
    ;

// TOKENS
SPACE : ' ' ;
LETTER : 'd' ;
DIGIT : '0'..'9' ;
TKDC returns [String s] : 'd' SPACE 'C' {$s = "d C";} ;

这是JAVA源代码,我只要求获得"expr“结果:

代码语言:javascript
复制
import org.antlr.runtime.*;
class Testantlr {

public static void main(String[] args) throws Exception {
    ExprLexer lex = new ExprLexer(new ANTLRFileStream(args[0]));
    CommonTokenStream tokens = new CommonTokenStream(lex);
    ExprParser parser = new ExprParser(tokens);
    try {
        System.out.println(parser.expr());
    } catch (RecognitionException e)  {
        e.printStackTrace();
    }
}

}

当我的输入文件有以下内容d 9时,就会出现问题。

我得到以下错误:

代码语言:javascript
复制
x line 1:2 mismatched character '9' expecting 'C'
x line 1:3 no viable alternative at input '<EOF>'

这里有人知道这个问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-06 10:17:18

你的语法有几处问题:

TKDC;

  • backtrack=true部分中的
  • lexer规则只能返回Tokens,所以在options部分中的returns [String s]不适用于Token规则之后,returns [String s]就被忽略了,这就是为什么您得到mismatched character '9' expecting 'C' (在那里没有回溯!);
  • expr规则的内容:(LETTER SPACE DIGIT | TKDC) {$s = $DIGIT.text + $TKDC.text;}没有什么意义(对我来说)。你要么想要匹配LETTER SPACE DIGITTKDC,但你却试图抓住这两种选择的text$DIGIT.textTKDC

在我看来,TKDC需要“提升”为解析器规则。

我认为你把你的例子写得太少了,无法说明你所面临的问题。也许更好的方法是解释你的实际问题:你到底想解析什么?

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

https://stackoverflow.com/questions/6594539

复制
相关文章

相似问题

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