Делает любой знает о способе отладить древовидные грамматики в ANTLRWorks

Предыдущие ответы хороши, но позволяют мне подчеркнуть важную мысль здесь еще раз. В частности, Вы сказали, что

, Если я понимаю правильно, .net время выполнения будет всегда мыться после меня.

Это только частично корректно. На самом деле, .NET [только 111] предложения автоматическое управление для одного конкретного ресурса : оперативная память. Всем другим ресурсам нужна ручная очистка. <глоток> 1)

Странно, оперативная память вкладывает особый статус почти все дискуссии о ресурсах программы. Существует, конечно, серьезное основание для этого †“оперативная память, часто самый недостаточный ресурс. Но стоит помнить, что существуют другие типы ресурсов также, которым также нужно управление.

<час>

<глоток> 1) обычное предпринятое решение состоит в том, чтобы связать время жизни других ресурсов ко времени жизни ячеек памяти или идентификаторов в коде †“следовательно существование финализаторов.

6
задан Mike Cargal 13 October 2009 в 16:45
поделиться

2 ответа

Отладчик ANTLRWorks должен нормально работать с грамматикой вашего дерева. Если я правильно помню, вам нужно использовать инструмент генерации кода ANTLR с флагом «-debug» (я использую цель Java), а затем, когда вы создаете свой экземпляр парсера дерева, используйте конструктор отладки, который принимает порт как Аргумент. В моем случае порт по умолчанию не работал, поэтому я произвольно выбрал 35505.

Запустите ANTLRWorks, откройте древовидную грамматику, нажмите «Выполнить» -> «Удаленная отладка ...», установите тот же порт. значение, используемое в конструкторе для вашего парсера дерева, и вы должны иметь возможность подключить отладчик к вашему запущенному приложению. Подробнее см. Часто задаваемые вопросы по отладке ANTLR 3 .

[ Обновление ] Предполагая, что вы используете цель Java (дайте нам знать, если это не так), вот более подробная информация о том, как начать работу:

Когда вы тестируете не- tree parser в ANTLRWorks есть закулисный процесс, который генерирует Java-код из вашего файла грамматики, а затем использует этот код для анализа вашего ввода. Когда вы используете свой синтаксический анализатор в своем собственном приложении, вы должны использовать ANTLR (в частности, класс org.antlr.Tool ) для генерации кода Java, который затем можно включить в свое приложение. В ANTLRWorks есть опция меню для этого, которая должна помочь вам начать работу. В моем случае у меня есть цель в моем файле сборки ant, которая генерирует код Java из моих грамматик и помещает эти исходные файлы Java в место, где остальная часть моего приложения может их найти. Мне нужно будет сделать что-то вроде:

String sourceText = "a + b = foo";
ANTLRStringStream inStream = new ANTLRStringStream(sourceText);

// your generated lexer class
MyLexer lexer = new MyLexer(inStream);
CommonTokenStream tokens = new CommonTokenStream(lexer);

// your generated parser class
MyParser parser = new MyParser(tokens);

// run the toplevel rule (in this case, `program`)
MyParser.program_return prog = parser.program();

// get the resulting AST (a CommonTree instance, in this case)
CommonTree tree = (CommonTree) prog.getTree();

// run a tree parser rule on the AST
MyTreeParser treeParser = new MyTreeParser(new CommonTreeNodeStream(tree));
treeParser.program();

Я настоятельно рекомендую получить копию The Definitive ANTLR Reference , если вы собираетесь использовать ANTLR. Все это описано довольно подробно, с множеством примеров для начала.

6
ответ дан 16 December 2019 в 21:42
поделиться

Если вы Убедитесь, что AST, который вы создаете, в порядке (с отладчиком ANTLRWORKS), тестирование обхода дерева не отличается от тестирования любого другого приложения. Если вы, например, генерируете код Java, используйте отладчик Eclipse для его тестирования или обычные сообщения журнала ...

0
ответ дан 16 December 2019 в 21:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: