ANTLR не выдает сообщения об ошибках при неверном вводе - PullRequest
1 голос
/ 15 декабря 2011

Я начал изучать 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 #, если кому-то понадобится их увидетьно они очень длинные, поэтому я задержусь, пока кто-нибудь их не попросит.Спасибо.

Ответы [ 2 ]

4 голосов
/ 24 февраля 2012

После некоторой отладки исходного кода 3.4.1.9004 я обнаружил, что свойство traceDestination имеет значение null. Итак, я установил свойство, как показано ниже в Main (), и сообщения начали появляться на консоли.

parser.TraceDestination = Console.Out;

1 голос
/ 15 декабря 2011

Я работал только с целью CSharp2 (и средой выполнения), потому что мне не удалось запустить цель CSharp3 на моей машине Ubuntu с MonoDevelop.

Когда вы используете ANTLRWorks, org.antlr.Tool используется для генерации классов ExprLexer.cs и ExprParser.cs, с которыми у среды CSharp3 возникают (иногда?) Проблемы, если память мне хорошо работает.

Попробуйте сгенерировать исходные файлы .cs с помощью инструмента Antlr3.exe: http://www.tunnelvisionlabs.com/downloads/antlr/antlr-dotnet-tool-3.4.1.9004.7z (обратите внимание, что tunnelvisionlabs.com из автор из CSharp3target) .

Я не проверял это из-за того, что незнаком с целью CSharp3, но попробовать стоит.

...