`
wlcome998
  • 浏览: 31505 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

疑问:关于ANTLR判断的结束符

    博客分类:
  • J2EE
阅读更多
本人最近在看Hibernate源代码,也顺便研究了ANTLR这一应用在Hibernate中对HQL到SQL进行转换的文法分析器。
现有一些疑问列举如下,希望高手赐教:
本人自己写了个expr.g文件,工作平台 eclipse+Antlr studio插件 ANTLR2.7.6
class ExprParser extends Parser;
options{
    buildAST=true;
}
expr: bexpr ;
bexpr: mexpr((PLUS^|MINUS^) mexpr)*;
mexpr
    :  atom(STAR^ atom)*
    ;

atom:  INT
    | LPAREN! expr RPAREN!
    ;

class ExprLexer extends Lexer;

options{
    k=2;
    charVocabulary='\u0000'..'\u007F';
}

LPAREN  : '(';
RPAREN  : ')';
PLUS    : '+';
MINUS   : '-';
STAR    : '*';
INT     : ('0'..'9')+;
WS      : (' '
          | '\t'
          | '\r' '\n' { newline(); }
          | '\n'      { newline(); }
          )
          { $setType(Token.SKIP); }
        ;

java文件
public static void main(String[] args) throws Exception, TokenStreamException {
        System.out.println("OK");
        ExprLexer lexer = new ExprLexer(System.in);
        ExprParser parser= new ExprParser(lexer);
        parser.expr();          
        AST t =parser.getAST();
        System.out.println(t.toStringTree());
    }

以上表达式分要是做词法分析,并转换成AST树
但本人输入1+2或者2+2*2任何表达式 按回车 均无任何反应, 感觉ANTLR并没认为回车是输入的结束,想问下ANTLR中默认的判断输入的结束符是什么?

好像expr: bexpr ;改成expr: bexpr SEMI; 并在Lexer中添加SEMI    :';';,可以实现在Antl强制定义分号为结束符;但不知道如果不加SEMI,ANTLR如何判断输入结束!!
分享到:
评论
3 楼 lubob 2007-09-28  
ctrl+z
2 楼 wlcome998 2007-07-25  
关于终结符.
在statement的规则里, 我们并没有设置终结符, 同时由于我们忽略了空格,制表符,回车, 所以在stdin状态下, 规则是无法终结的, 需要我们自己输入”EOF”来终止. 也就是结束lexer和parser. 使程序中止/
1 楼 wlcome998 2007-07-19  
ANTLR中输入结束符难道都需要自己定义吗?

相关推荐

    antlr-2.7.7.jar.zip

    implementation 'antlr:antlr:2.7.7' ``` 3. **如果没有使用构建工具**,你可以将jar文件放入项目的`lib`目录下,并在运行时通过`java -cp`命令指定classpath包含这个jar。 ANTLR 2.7.7虽然已经是一个较老的版本...

    antlr-2.7.7.jar

    antlr-2.7.7

    SysY2022:基于antlr4的词法分析C语言实现项目资.zip

    SysY2022:基于antlr4的词法分析C语言实现项目资

    antlr-3.5-API文档-中文版.zip

    Maven坐标:org.antlr:antlr:3.5; 标签:antlr、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和...

    antlr4-runtime-4.2-API文档-中文版.zip

    Maven坐标:org.antlr:antlr4-runtime:4.2; 标签:antlr、antlr4、runtime、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的...

    antlr-3.5-API文档-中英对照版.zip

    Maven坐标:org.antlr:antlr:3.5; 标签:antlr、jar包、java、API文档、中英对照版; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持...

    antlr4-runtime-4.7-API文档-中文版.zip

    Maven坐标:org.antlr:antlr4-runtime:4.7; 标签:antlr、runtime、antlr4、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的...

    antlr-runtime-3.4-API文档-中文版.zip

    Maven坐标:org.antlr:antlr-runtime:3.4; 标签:antlr、runtime、jar包、java、API文档、中文版; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码...

    antlr4-runtime-4.7-API文档-中英对照版.zip

    Maven坐标:org.antlr:antlr4-runtime:4.7; 标签:antlr、runtime、antlr4、jar包、java、API文档、中英对照版; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译...

    antlr-runtime-3.5-API文档-中文版.zip

    Maven坐标:org.antlr:antlr-runtime:3.5; 标签:antlr、runtime、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构...

    antlr-runtime-3.5.2-API文档-中英对照版.zip

    Maven坐标:org.antlr:antlr-runtime:3.5.2; 标签:antlr、runtime、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码...

    antlr中文文档预览版

    - 错误处理与调试:提供关于ANTLR解析错误的处理方法,以及如何进行语法和代码的调试。 - 示例与实践:通过实例演示ANTLR的使用,包括从简单的示例到复杂的语言解析。 - 性能优化:讨论如何提高ANTLR解析器的效率,...

    antlr4-webpack-loader:加载ANTLR4语法文件并将其编译为JavaScript

    antlr4-webpack-loader 加载ANTLR4语法文件( .g4 )并将其编译为JavaScript。 import { MyGrammarLexer , MyGrammarParser , MyGrammarListener , MyGrammarVisitor} from './MyGrammar.g4' ;配置将ANTLR4 ...

    GBase-8a-MPP-Cluster-SQL-Parser:使用ANTLR v4的GBase 8a MPP群集SQL解析器

    GBase 8a MPP Cluster SQL Parser是一款基于ANTLR v4构建的解析器,主要用于解析针对GBase 8a大规模并行处理(MPP)集群的SQL查询语句。ANTLR v4是一个强大的解析器生成器,它能将语法定义转换为高性能的语言解析器...

    Antlr3.Runtime_C#_

    1. **词法分析**:ANTLR可以生成词法分析器(也称为扫描器或分词器),它将输入源代码分解为词法单元(如标识符、关键字、操作符等)。 2. **语法分析**:ANTLR还生成语法分析器(或解析器),它根据预定义的语法...

    antlr4-master 源码

    ANTLR4(ANTLR Version 4)是一个强大的解析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件。它广泛应用于构建语言、工具和框架,包括SQL解析器、配置文件解析器、DSL(领域特定语言)以及各种编程...

    ts-parser:使用ANTLR4生成的TypeScript解析器

    **ts-parser: 使用ANTLR4生成的TypeScript解析器** TypeScript是一种强类型、静态类型的JavaScript超集,它在JavaScript的基础上增加了类、接口、泛型等特性,使得代码更加规范且易于维护。`ts-parser`是一个利用...

    antlr-samples:使用 ANTLR4 的简单示例

    ANTLR4 是一个强大的解析器生成器,主要用于读取、处理、执行或翻译结构化文本或二进制文件。...此外,ANTLR4 的强大功能还在于其对复杂语言结构的支持,如嵌套规则、递归和条件判断,这些都可能在示例中有所体现。

    antlr-runtime-3.5-API文档-中英对照版.zip

    Maven坐标:org.antlr:antlr-runtime:3.5; 标签:antlr、runtime、jar包、java、API文档、中英对照版; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的...

    ANTLR参考手册

    ANTLR(ANother Tool for Language Recognition)是一个强大的解析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件。ANTLR被广泛应用于构建语言、工具和框架,如编程语言、配置文件格式、协议、文档...

Global site tag (gtag.js) - Google Analytics