生成的代码中的Antlr4r C#令牌类型值

时间:2019-05-19 20:09:08

标签: c# visual-studio parsing code-generation antlr4

我是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

上找到。

0 个答案:

没有答案