如何在 Anltr4/C# 中导入名称空间(例如使用 System.Linq)
How can I import namespaces (e.g. using System.Linq) in Anltr4 / C#
我创建了一个简单的 .g4 (Antlr4) 语法和词法分析器文件。
它可以很好地生成我的 lexer/parser 代码。
但是在添加了一些需要 Linq 扩展的自定义代码之后,我现在需要将自定义语句 "using System.Linq;" 注入到我生成的词法分析器代码文件的顶部。
我知道有一些用于注入代码的选项(来自 .g4 文件),例如
@lexer::members {
... {custom lexer code goes here}
谁能告诉我正确的 (.g4) 语法,它将在呈现的 lexer/parser.
中呈现必要的 "using" 语句
更新:
LexLi 提出了一个很好的观点.. 为什么我需要那个?我应该在访问者或侦听器中编写我的代码。 答案:我正在尝试在 C# 中实现 INDENT 和 DEDENT 标记(类似于 "ANTLR4" 下发布的 Java 代码:
ANTLR What is simpliest way to realize python like indent-depending grammar?
谢谢!
您可以通过经典方式控制写入文件的内容,
@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
语句添加到 header。
我创建了一个简单的 .g4 (Antlr4) 语法和词法分析器文件。
它可以很好地生成我的 lexer/parser 代码。 但是在添加了一些需要 Linq 扩展的自定义代码之后,我现在需要将自定义语句 "using System.Linq;" 注入到我生成的词法分析器代码文件的顶部。
我知道有一些用于注入代码的选项(来自 .g4 文件),例如
@lexer::members {
... {custom lexer code goes here}
谁能告诉我正确的 (.g4) 语法,它将在呈现的 lexer/parser.
中呈现必要的 "using" 语句更新: LexLi 提出了一个很好的观点.. 为什么我需要那个?我应该在访问者或侦听器中编写我的代码。 答案:我正在尝试在 C# 中实现 INDENT 和 DEDENT 标记(类似于 "ANTLR4" 下发布的 Java 代码: ANTLR What is simpliest way to realize python like indent-depending grammar?
谢谢!
您可以通过经典方式控制写入文件的内容,
@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
语句添加到 header。