我正在使用最新的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;
}
我假设这是语法的错,因为另一个人正在编译并正常工作。你能指出我可能的错误吗?
答案 0 :(得分:-5)
我看到这里没有人对ANTLR有所了解。幸运的是,我已经把它弄清楚了。问题的原因是语法中的逻辑 - 我不知道究竟是什么,它可能是错误的导入,使用变量,参数或以错误的方式返回,或者最终缺少lexer的包声明:
@lexer::header{
package parser;
}