É possível ter dois ou mais analisadores Lex / Yacc no mesmo aplicativo
-
06-09-2019 - |
Pergunta
Eu tenho uma aplicação onde eu já tenho um analisador para um tipo de gramática e eu preciso adicionar uma segunda gramática diferente para outra finalidade.
É possível ter mais de um?
E se assim como você começa um outro ponto de entrada?
Graças
david allan finch
Solução
Eu acho que você pode para isso usando a opção --name-prefix
a Bison, ea opção --prefix
para Flex.
Em ambos os casos eles permitem que você substituir o padrão prefixo "yy
" usado nas funções geradas com um prefixo de sua própria escolha.
Outras dicas
Sim, é possível.
yacc deve ter um sinalizador -p, onde você pode especificar um prefixo diferente, em vez do "aa" padrão.
O arquivo gerado pelo conatins lex apenas um símbolo usado fora: yylex. Você pode compilar com -Dyylex = mySecondLex, por exemplo.
Não é uma resposta direta, mas você pode querer considerar o uso de uma abordagem mais genérica, como GoldParser que lhe permite utilizar um motor de genérico para processar o LALR e DFA apresentadas gerada a partir de suas gramáticas.
Esta maneira ao redor, você pode usar qualquer número de diferentes gramáticas na mesma aplicação, e mudando a gramática não cria novo código-fonte, mas sim apenas novos arquivos de mesa (que poderiam ser incluídos como recurso incorporado ou similar).
Padrão lex e yacc não têm nenhuma maneira de fazer isso. Flex e Bison fazem, como fazem algumas outras implementações. Desde que você disse (em um comentário) que você não está usando flex e bison, quais versões do lex e yacc são você está usando?