如何在Anltr4 / C#中导入名称空间(例如,使用System.Linq)

时间:2018-10-12 21:50:49

标签: c# antlr antlr4

我已经创建了一个简单的 .g4 (Antlr4)语法和词法分析器文件。

它可以很好地生成我的词法分析器/解析器代码。 但是,在添加了一些需要Linq扩展名的自定义代码之后,我现在需要在生成的词法分析器代码文件顶部插入自定义语句“使用System.Linq;”

我知道有一些注入代码的选项(来自.g4文件),例如

@lexer::members {
     ... {custom lexer code goes here}

有人可以指出正确的(.g4)语法,该语法将在呈现的词法分析器/解析器中呈现必要的“使用”语句。

更新: LexLi提出了一个好点..我为什么需要那个?我应该在访问者或侦听器中编写代码。 对此的答案:我正在尝试在C#中实现INDENT和DEDENT令牌(类似于此处“ ANTLR4”下发布的Java代码的类似代码: ANTLR What is simpliest way to realize python like indent-depending grammar?

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以用经典方式控制写入文件的内容,

@parser::header
{
#pragma warning disable 3001, 3003, 3005, 3009, 1591 
}

@lexer::header
{
#pragma warning disable 3001, 3003, 3005, 3009, 1591 
}

@parser::namespace { Lextm.Namespace }
@lexer::namespace { Lextm.Namespace }

@parser::footer
{
#pragma warning restore 3001, 3003, 3005, 3009, 1591 
}

@lexer::footer
{
#pragma warning restore 3001, 3003, 3005, 3009, 1591 
}

因此,在您的情况下,请将using语句添加到标题中。