Вопрос

Я вижу несколько примеров main() для C, например. http://www.antlr.org/wiki/display/ANTLR3/Five+mine+introduction+to+ANTLR+3 и http://www.antlr.org/api/C/index.html

Разыменование, похоже, AST.Я не знаю, что это такое, и — прошу меня извинить — не хочу этого знать, если можно этого избежать.

Я бы хотел просто определить лексер и грамматику (для AT-команд модема) и автоматически сгенерировать main() или вырезать/вставить откуда-то.

Небольшая особенность заключается в том, что большинство примеров, похоже, считывают данные из файла, тогда как я буду получать ряд входных данных (AT-команды) в виде строк, передаваемых в качестве параметров.

Может ли кто-нибудь указать мне на простой метод main(), который я могу адаптировать (и, возможно, предложить, как его адаптировать?) Я знаю, что нужно много спросить, извините.

Это было полезно?

Решение

AST — это «абстрактное синтаксическое дерево», и для AT-команд оно вам не нужно.

Фактически, ANTLR не подходит для анализа AT-команд.Почему бы просто не проверить наличие «AT», а затем проанализировать команды вручную?Набор команд модема, вероятно, достаточно прост, и сделать это будет проще, чем запустить ANTLR, если вы никогда не делали этого раньше.

Если вы реализуете полный набор AT-команд, включая escape-последовательность «+++», время также является фактором, который вы не сможете реализовать, используя только ANTLR.

Ответ на комментарии:

Разумно рассматривать ANTLR как инструмент для уменьшения количества ошибок.В ответ на ваши вопросы: «Вы бы предпочли прочитать это или созданный код?И какой из них вы бы предпочли поддерживать?», ответ: «Это зависит». Я использую как ANTLR, так и парсеры, написанные вручную, в зависимости от контекста;в этом контексте я бы выбрал парсер, написанный вручную.Некоторые причины:вероятно, встроенное приложение, относительно простое (много команд не равно сложности), протокол связи.У вас другой контекст и явно есть свои собственные причины, в том числе «попробовать».

Итак, чтобы ответить на ваш другой вопрос о главном:Да, вы можете использовать тот, который есть в вики ANTLR.Для чтения из фрагмента памяти используйте antlr3NewAsciiStringInPlaceStream() или antlr3NewAsciiStringCopyStream() (при необходимости) вместо antlr3AsciiFileStreamNew().

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top