我在以下语言定义中显然有一个错误:
grammar Hello;
object :
ALL* NAME ALL* '{'
(ALL* | (ALL* NAME ALL* NAME)* | (ALL* object)*)*
'}' ALL*;
ALL :
(~('{' | '}' | '"'))+ -> skip; // All but braces and double quotes
NAME :
'"' ALL* '"';
当我尝试读取文件或直接添加内容(使用run.bat Hello object -gui
)时,解析器给我一个语法错误:mismatched input '<EOF>' expecting NAME
. 而且我只有一个带有单个节点的树:'object'。
这是Java源代码:
public static void main(String[] args) throws Exception {
HelloLexer lexer = new HelloLexer(new ANTLRFileStream("gamemodes.txt"));
TokenStream tokenStream = new CommonTokenStream(lexer);
HelloParser parser = new HelloParser(tokenStream);
System.out.println(lexer.getAllTokens().size());
parser.setBuildParseTree(true);
// Tree Creation
RuleContext tree = parser.object();
tree.inspect(parser);
}
最后,文件结构(在任何地方都有一些空格/字符(没有大括号和双引号)):
...
"objName"
{
...
"innerObjName1"
{
"firstProperty" "firstResult"
...
"secondProp" ""
}
"innerObjName2"
{
"firstProperty" "firstResult"
"secondProp" ""
}
}
...
注意:我在 Windows 上。
谢谢 !