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

Foi útil?

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?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top