3

希望这是一个非常快的一个;)我已经在 ANTLR3 中编写了一个词法分析器/解析器规范,并且目标是 CSharp2 目标。生成的代码可以正常工作,但我无法让 ANTLR 将 C# 输出放入命名空间。

语法文件的相关部分如下:

grammar MyGrammar;

options
{
    language = CSharp2;
    output = AST;
    ASTLabelType = CommonTree;
}

为了生成正确的命名空间,我尝试过:

@namespace { MyNamespace }

@lexer::namespace { MyNamespace }
@parser::namespace { MyNamespace }

但是这两个都会产生错误,声称该文件没有规则。

任何帮助表示赞赏。

4

3 回答 3

5

我将它用于组合的词法分析器和解析器(它会正确生成命名空间):

grammar Test;

options
{
    language=CSharp2;
}

@lexer::namespace {
    My.Name.Space
}

@parser::namespace {
    My.Name.Space
}


DIGIT   :   '0'..'9';

simple  :    DIGIT EOF;

所以我想知道为什么你的版本不起作用——也许你想试试这个简单的例子,看看它是否适合你。

于 2008-11-25T09:54:45.483 回答
4

似乎 @namespace 指令需要放在 tokens{} 块之后。现在一切都好...

于 2008-11-26T02:14:56.537 回答
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
于 2012-09-18T13:27:06.837 回答