我是Antlr4的新手,我正在尝试创建一种新语言,并在.csproj项目中使用Antrl4.CodeGenerator nuget包。
我正在使用单独的词法分析器/解析器语法文件,并使用options { tokenVocab=Lexer }
引用解析器中的词法分析器。这导致2个单独的类,每个类包含用于令牌类型值的const字段。 (即:public const int NEWLINE=5;
)
是否可以将自定义值分配给生成的令牌类型值(在上面的示例中为5)?原因是我有一个单独的枚举类型,已经为每种令牌类型定义了常量值(即:enum TokenKind { NEWLINE= 1000 }
)。
当前,我使用静态字典在生成的令牌类型值和枚举值之间进行映射,但是目标是将生成的令牌类型值直接映射到枚举值(即:public const int NEWLINE=1000;
)>
我尝试使用自定义令牌文件在单独的 .tokens 文件中定义令牌的值,但这会产生重复的令牌错误(下面的代码)
LexerTok.tokens :
NEWLINE=5000
Lexer.g4 :
options { tokenVocab=LexerTok; }
NEWLINE: [\r\n]+
Parser.g4
options { tokenVocab=Lexer; }
但是以某种方式,生成器将其视为新令牌,并且错误指出NEWLINE
令牌已经定义。
EDIT :我为该问题创建了一个小版本,可在https://github.com/fkpama/Antlr4Tokens.git
上找到。