浏览 4121 次
锁定老帖子 主题:疑问:关于ANTLR判断的结束符
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-07-18
现有一些疑问列举如下,希望高手赐教: 本人自己写了个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如何判断输入结束!! 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-07-19
ANTLR中输入结束符难道都需要自己定义吗?
|
|
返回顶楼 | |
发表时间:2007-07-25
关于终结符.
在statement的规则里, 我们并没有设置终结符, 同时由于我们忽略了空格,制表符,回车, 所以在stdin状态下, 规则是无法终结的, 需要我们自己输入”EOF”来终止. 也就是结束lexer和parser. 使程序中止/ |
|
返回顶楼 | |
发表时间:2007-09-28
ctrl+z
|
|
返回顶楼 | |