请将ANTLR v3: order token to improve performance of tree walker视为预信息
不幸的是,我有'array'和'null'作为标记的问题。如果我在令牌文件中指定它们,如下所示:
TypeArray=394
'array'=394
Null=395
'null'=395
然后似乎ANTLR不再识别令牌。我在编译语法时收到以下错误消息:
TSPHP.g:582:4: no lexer rule corresponding to token: TypeArray
TSPHP.g:980:4: no lexer rule corresponding to token: Null
此外,当我调试时:
[18:59:10] warning(24): template error: context [/outputFile /parser /genericParser /region__/genericParser__members /region__/genericParser__members /_sub290] 8:27 no such property or can't access: null.hasSynPred
我应该如何指定令牌以便它起作用?
修改 作为附加信息。当我在不使用tokenVocab选项的情况下生成语法文件时,它似乎工作。当我尝试使用生成的令牌文件作为tokenVocab的输入时,我得到以下异常:
[18:49:28] error(10): internal error: D:\TSPHP-parser\antlr\TSPHP.g : java.lang.NullPointerException
org.antlr.tool.AssignTokenTypesBehavior.aliasTokenIDsAndLiterals(AssignTokenTypesBehavior.java:278)
org.antlr.tool.AssignTokenTypesBehavior.defineTokens(AssignTokenTypesBehavior.java:215)
org.antlr.tool.CompositeGrammar.assignTokenTypes(CompositeGrammar.java:347)
org.antlr.Tool.process(Tool.java:481)
org.antlr.works.generate.CodeGenerate.generate(CodeGenerate.java:104)
org.antlr.works.generate.CodeGenerate.run(CodeGenerate.java:185)
java.lang.Thread.run(Thread.java:722)
我意识到这是由于令牌'\\'需要指定如下'\\\\'。但是一旦我解决了这个问题,我就会再次遇到同样的问题(没有勒克斯规则....)