我已经开始学习ANTLR以便将来实现特定于域的语言(DSL)。我已经购买了最终ANTLR参考资料,并已开始按照自己的方式工作,以熟悉程序和语言/编译器设计的概念。我已经成功地获得了在我的环境(Visual Studio 2010和C#)中工作的所有内容,并且我已经成功地创建了一些基本语法,如本书所述。 java的源代码可以在这里找到:http://pragprog.com/titles/tpantlr/source_codeANTLR不会在无效输入上发出错误消息
但是,虽然在第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#类,如果有人需要看到他们,但他们都非常长,所以我会推迟,直到有人要求他们。谢谢。
什么是你不会得到错误的输入? –
我没有收到任何无效输入错误。我尝试了诸如“3 + @”之类的东西,没有错误。 “(3”也导致没有错误,看来它不是一个特定类型的异常导致它。 – almostProgramming