将来、ドメイン固有言語(DSL)を実装するために、ANTLRの学習を始めました。私はTheDefinitiveANTLR 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#クラスを投稿しますが、非常に長いので、誰かが要求するまで延期します。ありがとうございました。