等待连接到远程解析器的超时



我用的是最新的ANTLR。当我试图调试这个语法时,我得到了这个错误消息:

grammar Grammar;
options {   language = Java;
}
@header {
package parser;
import java.util.HashMap;
import viewmodel.*;
import java.util.List;
}
@members {
/** Map variable name to Integer object holding value */
HashMap memory = new HashMap();
}
prog returns [DiagramNode node]
    :   clas 
        {$node = $clas.node;}
    ;
clas returns [DiagramNode node]
    :VISIBILITY* CLASSORINTERFACE name=NAME '{' classDef '}' NEWLINE
        {$node = $classDef.node;
        $node.setName(name.getText());
        }
    ;
classDef returns [DiagramNode node]
    :{$node = new DiagramNode();    }
    fieldDef ';' NEWLINE?
        {$node.getFields().add($fieldDef.field);}
    ;
fieldDef returns [DiagramField field]
    :{$field = new DiagramField();}
    type=NAME name=NAME ';' NEWLINE? 
        {$field.setType(type.getText());
        $field.setName(name.getText());
        }
    ;

VISIBILITY 
    :   ('public' | 'private' | 'protected');
CLASSORINTERFACE
    :   ('class' | 'inerface');
NAME
    :   ('a'..'z'|'A'..'Z') ('a'..'z'|'A'..'Z'|'0'..'9') *;
INT :   '0'..'9'+ ;
NEWLINE:'r'? 'n' {skip();};
WS  :   (' '|'t')+ {skip();} ;

输入为:

class Abc {
    Type1 Name1;
    Type2 Name2;
}

我认为这是语法的错误,因为另一个正在编译和工作良好。你能指出可能的错误吗?

我看到这里没有人知道任何关于ANTLR的事情。幸运的是,我自己发现了。问题的原因是语法内部的逻辑—我不知道具体是什么,它可能是错误的导入,以错误的方式使用变量,参数或返回,或者最终缺少lexer的包声明:

@lexer::header{
    package parser;
}

相关内容

  • 没有找到相关文章

最新更新