Como usar o programa lex com o programa yacc

Você também pode usar o programa lex com um gerador de parser, como o comando yacc . O comando yacc gera um programa, chamado de parser, que analisa a construção de mais de uma entrada de palavra.

Este programa parser opera bem com os analisadores lexicais que o comando lex gera. Os analisadores reconhecem muitos tipos de gramática sem relação com o contexto. Estes parsers precisam de um pré-processador para reconhecer tokens de entrada como o pré-processador que o comando lex produz.

O programa lex reconhece apenas expressões regulares estendidas e os formata em pacotes de caracteres chamados de tokens, conforme especificado pelo arquivo de entrada. Ao utilizar o programa lex para fazer um analisador lexical para um analisador lexical, o analisador lexical (criado a partir do comando lex ) partia o fluxo de entrada. O analisador (a partir do comando yacc ) designa estrutura para as peças resultantes. Você também pode usar outros programas junto com os programas gerados pelos comandos lex ou yacc .

Um token é a menor unidade independente de significado, conforme definido pelo analisador parser ou lexical. Um token pode conter dados, uma palavra-chave de idioma, um identificador ou outras partes de uma sintaxe de idioma.

O programa yacc procura um analisador lexical subroutine chamado yylex, que é gerado pelo comando lex . Normalmente, o programa principal padrão na biblioteca lex chama a subroutine yylex . No entanto, se o comando yacc for instalado e seu programa principal for usado, o programa yacc chama a subroutine yylex . Neste caso, onde o adequadotokenvalor é retornado, cada regra do programa lex deve terminar com o seguinte:
return(token);
O comando yacc atribui um valor inteiro a cada token definido no arquivo de gramática yacc através de uma instrução de pré-processador #define . O analisador lexical deve ter acesso a essas macros para devolver os tokens para o analisador. Use a opção yacc -d para criar um arquivo y.tab.h e inclua o arquivo y.tab.h no arquivo de especificação lex, adicionando as seguintes linhas à seção de definição do arquivo de especificação lex:
%{
#include "y.tab.h"
%}
Como alternativa, é possível incluir o arquivo lex.yy.c no arquivo de saída yacc incluindo a linha a seguir após a segunda%%(sinal de percentual, sinal de percentual) no arquivo de gramática yacc :
#include "lex.yy.c"

A biblioteca yacc deve ser carregada antes da biblioteca lex para obter um programa principal que fatura o analisador yacc . Você pode gerar programas lex e yacc em qualquer ordem.