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

本人最近在看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如何判断输入结束!!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值