Debugging ANTLRWorks&x27;经典的例子并不';t工作(调试和错误)

Debugging ANTLRWorks&x27;经典的例子并不';t工作(调试和错误),debugging,antlr,antlr3,antlrworks,Debugging,Antlr,Antlr3,Antlrworks,我是Antlr的新手,在这一点上我真的迷路了。因为AntlWorks(我的版本是1.5)似乎不起作用 下面是我在Expr.g中的主要代码: grammar Expr; @header { package test; import java.util.HashMap; } @lexer::header {package test;} @members { /** Map variable name to Integer object holding value */ HashMap memo

我是Antlr的新手,在这一点上我真的迷路了。因为AntlWorks(我的版本是1.5)似乎不起作用

下面是我在Expr.g中的主要代码:

grammar Expr;

@header {
package test;
import java.util.HashMap;
}

@lexer::header {package test;}

@members {
/** Map variable name to Integer object holding value */
HashMap memory = new HashMap();
}

prog:   stat+ ;

stat:   expr NEWLINE {System.out.println($expr.value);}
    |   ID '=' expr NEWLINE
        {memory.put($ID.text, new Integer($expr.value));}
    |   NEWLINE
    ;

expr returns [int value]
    :   e=multExpr {$value = $e.value;}
        (   '+' e=multExpr {$value += $e.value;}
        |   '-' e=multExpr {$value -= $e.value;}
        )*
    ;

multExpr returns [int value]
    :   e=atom {$value = $e.value;} ('*' e=atom {$value *= $e.value;})*
    ; 

atom returns [int value]
    :   INT {$value = Integer.parseInt($INT.text);}
    |   ID
        {
        Integer v = (Integer)memory.get($ID.text);
        if ( v!=null ) $value = v.intValue();
        else System.err.println("undefined variable "+$ID.text);
        }
    |   '(' e=expr ')' {$value = $e.value;}
    ;

ID  :   ('a'..'z'|'A'..'Z')+ ;
INT :   '0'..'9'+ ;
NEWLINE:'\r'? '\n' ;
WS  :   (' '|'\t')+ {skip();} ;
在尝试调试时,控制台中出现以下错误:

[04:43:42] C:\Users\GreyZ0mbie\Documents\output\ExprParser.java:91: error: <identifier> expected
[04:43:42]  public final void prog() throws  {
[04:43:42]                                 ^
[04:43:42] C:\Users\GreyZ0mbie\Documents\output\ExprParser.java:171: error: <identifier> expected
[04:43:42]  public final void stat() throws  {
[04:43:42]                                 ^
[04:43:42] C:\Users\GreyZ0mbie\Documents\output\ExprParser.java:297: error: <identifier> expected
[04:43:42]  public final int expr() throws  {
[04:43:42]                                ^
[04:43:42] C:\Users\GreyZ0mbie\Documents\output\ExprParser.java:401: error: <identifier> expected
[04:43:42]  public final int multExpr() throws  {
[04:43:42]                                    ^
[04:43:42] C:\Users\GreyZ0mbie\Documents\output\ExprParser.java:488: error: <identifier> expected
[04:43:42]  public final int atom() throws  {
[04:43:42]                                ^
[04:43:42] 5 errors
[04:43:42]C:\Users\GreyZ0mbie\Documents\output\ExprParser.java:91:错误:应为
[04:43:42]公开最终作废程序()抛出{
[04:43:42]                                 ^
[04:43:42]C:\Users\GreyZ0mbie\Documents\output\ExprParser.java:171:错误:应为
[04:43:42]公开最终作废状态()抛出{
[04:43:42]                                 ^
[04:43:42]C:\Users\GreyZ0mbie\Documents\output\ExprParser.java:297:错误:应为
[04:43:42]公共最终整数表达式()抛出{
[04:43:42]                                ^
[04:43:42]C:\Users\GreyZ0mbie\Documents\output\ExprParser.java:401:错误:应为
[04:43:42]公开决赛int multExpr()抛出{
[04:43:42]                                    ^
[04:43:42]C:\Users\GreyZ0mbie\Documents\output\ExprParser.java:488:错误:应为
[04:43:42]公共最终int atom()抛出{
[04:43:42]                                ^
[04:43:42]5个错误

我想,问题可能出在程序版本或Java版本(网站上的最后一个Java版本)。最不幸的是,我刚刚开始使用该程序,根本无法解决此错误。

请切换到AntlWorks 1.4.3

我遇到的错误与AntlrWorks 1.5生成此类损坏的Java文件时完全相同

(更新:上面的链接不再有效。你可以从谷歌代码下载)

  • 使用网络浏览器,如谷歌浏览器
  • 右键单击查看原始文件链接,并选择“将链接另存为…”将此文件另存为antlrworks-1.4.3.jar

  • 请切换到AntlWorks 1.4.3

    我遇到的错误与AntlrWorks 1.5生成此类损坏的Java文件时完全相同

    (更新:上面的链接不再有效。你可以从谷歌代码下载)

  • 使用网络浏览器,如谷歌浏览器
  • 右键单击查看原始文件链接,并选择“将链接另存为…”将此文件另存为antlrworks-1.4.3.jar

  • 这是AntlWorks 1.5中的一个bug,它只影响AntlWorks的调试功能,并且已经在下一版本中修复。

    这是AntlWorks 1.5中的一个bug,它只影响AntlWorks的调试功能,并且已经在下一版本中修复。

    +antlr3标签,因为AntlrWorks 1.4-1.5用于ANTLR 3。可能重复的是+antlr3标签,因为AntlrWorks 1.4-1.5用于ANTLR 3。可能重复的是非常感谢!现在可以了。:)我的“蜘蛛感知”关于版本是正确的。谢谢你的提示。在我的情况下,切换到1.5rc2就成功了。1.4.3在代码生成过程中挂断了。非常感谢!它现在可以工作了。:)我关于版本的“蜘蛛感觉”是正确的。谢谢你的提示。在我的情况下,切换到1.5rc2就成功了。1.4.3在代码生成过程中挂断了。