我已经开始学习 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# 类,我会发布它们,但它们很长,所以我会推迟到有人请求它们。谢谢你。