Я начал изучать ANTLR, чтобы в будущем внедрить язык, специфичный для предметной области (DSL).Я купил The Definitive ANTLR Reference и начал работать над ним, чтобы ознакомиться с программой и концепциями языков / дизайна компилятора.Я успешно получил все, что работает в моей среде (Visual Studio 2010 и C #), и мне удалось создать некоторые базовые грамматики, как описано в книге.Исходный код для Java можно найти здесь: http://pragprog.com/titles/tpantlr/source_code
Однако, работая над главой 3, я столкнулся с проблемой, связанной с тем, что классы не выдают ошибки на консоль, как показано в книге.Я использую ту же грамматику, которая используется в книге, поэтому я предполагаю, что она имеет какое-то отношение к средам выполнения C #.В настоящее время я использую ANTLRWorks для генерации лексера / анализатора, и я использую среды выполнения 3.4 ANTLR для CSharp3 (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 #, если кому-то понадобится их увидетьно они очень длинные, поэтому я задержусь, пока кто-нибудь их не попросит.Спасибо.