ANTLR无效输入上的错误消息

时间:2011-12-15 18:42:20

标签: antlr antlr3 antlrworks

我已经开始学习ANTLR以便将来实现特定于域的语言(DSL)。我已经购买了The Definitive ANTLR Reference并开始研究它,以便熟悉程序和语言/编译器设计的概念。我已经成功地在我的环境中完成了所有工作(Visual Studio 2010和C#),并且我已经成功地创建了一些基本的语法,如本书所述。可以在此处找到java的源代码:http://pragprog.com/titles/tpantlr/source_code

然而,在完成第3章的过程中,我遇到了一个问题,涉及不向控制台发出错误的类,如本书所示。我正在使用本书中使用的相同语法,所以我假设它与C#运行时有关。我目前正在使用ANTLRWorks生成词法分析器/解析器,我正在使用CSharp3的3.4 ANTLR分发运行时(Antlr3.Runtime.dll和Antlr4.StringTemplate.dll)。

这是一个已知问题吗?如果没有,我应该尝试使用旧版本的运行时或ANTLRWorks吗?

我正在使用的语法:

grammar Expr;

options
{
   language = CSharp3;
}

prog    :   stat+ ;

stat    :   expr NEWLINE
|   ID '=' expr NEWLINE
|       NEWLINE
;

expr    :   multExpr (('+'|'-') multExpr)*
;

multExpr 
:   atom('*' atom)*
;

atom    :   INT
|   ID
|   '(' expr ')'
;

ID  :   ('a'..'z'|'A'..'Z')+ ;
INT :   '0'..'9'+ ;
NEWLINE :   '\r'? '\n';
WS  :   (' '|'\t')+ {Skip();};

我会发布C#课程,如果有人需要看到它们,但它们很长,所以我会推迟到有人要求它们。谢谢。

2 个答案:

答案 0 :(得分:4)

在对3.4.1.9004源代码进行一些调试之后,我发现traceDestination属性为null。因此,我在Main()中设置了如下所示的属性,并在控制台上显示了开始显示的消息。

parser.TraceDestination = Console.Out;

答案 1 :(得分:1)

我只使用了CSharp2目标(和运行时),因为我无法使用MonoDevelop在我的Ubuntu机器上运行CSharp3目标。

当您使用ANTLRWorks时,org.antlr.Tool用于生成ExprLexer.csExprParser.cs类,如果内存对我有好处,CSharp3运行时(有时?)会出现问题。

尝试使用.cs工具生成Antlr3.exe源文件:http://www.tunnelvisionlabs.com/downloads/antlr/antlr-dotnet-tool-3.4.1.9004.7z (请注意,tunnelvisionlabs.com来自CSharp3目标的the author)< / em>的

我没有对此进行过测试,因为我对CSharp3目标不熟悉,但值得一试。