Можно ли иметь два или более анализатора Lex / Yacc в одном приложении? - PullRequest
6 голосов
/ 08 апреля 2009

У меня есть приложение, в котором у меня уже есть парсер для одного вида грамматики, и мне нужно добавить вторую другую грамматику для другой цели.

Возможно ли иметь более одного?

А если так, как вы получаете другую точку входа?

Спасибо

Дэвид Аллан Финч

Ответы [ 4 ]

8 голосов
/ 08 апреля 2009

Я думаю, что вы можете сделать это с помощью опции --name-prefix для Bison и опции --prefix для Flex.

В обоих случаях они позволяют заменить префикс "yy" по умолчанию, используемый в функциях, сгенерированный префиксом по вашему выбору.

2 голосов
/ 08 апреля 2009

Да, это возможно.

yacc должен иметь флаг -p, где вы можете указать другой префикс вместо значения по умолчанию "yy".

Файл, сгенерированный lex, содержит только один символ, используемый снаружи: yylex. Вы можете скомпилировать, например, с -Dyylex = mySecondLex.

1 голос
/ 08 апреля 2009

Стандартные lex и yacc не могут этого сделать. Flex и Bison делают, как и некоторые другие реализации. Поскольку вы сказали (в комментарии), что не используете flex и bison, какие версии lex и yacc вы используете ?

1 голос
/ 08 апреля 2009

Не прямой ответ, но вы можете рассмотреть возможность использования более общего подхода, такого как GoldParser , который позволяет использовать универсальный механизм для обработки таблиц LALR и DFA, сгенерированных из ваших грамматик.

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

...