Ищем Antlr 3 / C образец main () - PullRequest
       15

Ищем Antlr 3 / C образец main ()

1 голос
/ 02 декабря 2009

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

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

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

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

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

1 Ответ

2 голосов
/ 02 декабря 2009

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

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

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

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

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

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

...