希望这是一个非常快的;)我在ANTLR3中编写了一个词法分析器/解析器规范,并且定位于CSharp2目标。生成的代码可以正常工作,但我无法通过ANTLR将C#输出放入命名空间。
语法文件的相关部分如下:
grammar MyGrammar;
options
{
language = CSharp2;
output = AST;
ASTLabelType = CommonTree;
}
为了生成正确的命名空间,我尝试过:
@namespace { MyNamespace }
和
@lexer::namespace { MyNamespace }
@parser::namespace { MyNamespace }
但这两个都会产生错误,声称该文件没有规则。
感谢任何帮助。
答案 0 :(得分:5)
我将它用于组合词法分析器和解析器(并且它正确地生成命名空间):
grammar Test;
options
{
language=CSharp2;
}
@lexer::namespace {
My.Name.Space
}
@parser::namespace {
My.Name.Space
}
DIGIT : '0'..'9';
simple : DIGIT EOF;
所以我想知道为什么你的版本不起作用 - 也许你想尝试这个简单的例子,看看它是否适合你。
答案 1 :(得分:4)
似乎需要在令牌{}块之后放置@namespace指令。一切都很好......
答案 2 :(得分:2)
使用language = 'CSharp3';
(以及CSharp2),您可以执行以下操作:
@lexer::namespace {
My.Name.Space
}
@parser::namespace {
My.Name.Space
}
生成:
} // namespace
My.Name.Space <-- compile error here
在词法分析器和解析器代码的末尾。如果我写:
@lexer::namespace {My.Name.Space}
@parser::namespace {My.Name.Space}
它工作正常并生成:
} // namespace My.Name.Space <-- within the line comment, no error of course