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

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

grammar MyGrammar;

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

为了生成正确的名称空间,我尝试过:
@namespace { MyNamespace }


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

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

任何帮助表示赞赏。

最佳答案

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

grammar Test;

options
{
    language=CSharp2;
}

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

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


DIGIT   :   '0'..'9';

simple  :    DIGIT EOF;

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

10-06 09:42