next up previous contents
Next: Geração da aplicação Up: Analisadores léxicos Previous: Especificação das sentenças regulares   Sumário

Integração com código C

O resultado da aplicação do programa lex, tendo como entrada um arquivo de especificação de expressões regulares e respectivas ações, é a criação de um arquivo-fonte contendo o código C que implementa o correspondente analisador léxico. Este está associado à rotina de nome yylex(), que é invocada pela aplicação para fazer o reconhecimento dos itens léxicos na seqüência de caracteres da entrada.

A rotina yylex() não recebe nenhum argumento e pode retornar um valor inteiro, que no processo de análise léxica pode ser associado a um tipo de token. Essa rotina lê os caracteres de entrada de um arquivo especificado pela variável global yyin e envia os resultados de sua análise para o arquivo especificado pela variável global yyout; essas duas variáveis são ponteiros para FILE, conforme definido para a manipulação de arquivos em C (Seção 2.8). Adicionalmente, a última string que foi reconhecida pelo analisador léxico é referenciada pela variável global yytext, do tipo ponteiro para caracteres.

A definição padrão das variáveis yyin e yyout associa-as respectivamente ao arquivo de entrada padrão (teclado) e ao arquivo de saída padrão (tela do monitor). Essa definição pode ser modificada pela especificação presente na seção de código do usuário do arquivo lex.

Se nenhum código for definido nessa seção, o código de aplicação utilizado é o fornecido na biblioteca de rotinas do lex, tipicamente algo da forma

  int main() {
      yylex();
      return 0;
  }

Para modificar as definições padronizadas, o código C que altera esse comportamento deve estar especificado nessa seção. Por exemplo, para que o analisador léxico que reconhece as constantes inteiras pudesse ter a opção de obter sua entrada de um arquivo especificado na linha de comando, o arquivo de especificação lex apresentado como o Algoritmo 3.2 poderia ter sido utilizado.


\begin{Program}
% latex2html id marker 1849
[htb]
\begin{listing}{1}
DIGIT [0-9]...
...0);
}
\end{listing}\caption{Arquivo de especificação \texttt{lex}.}\end{Program}


next up previous contents
Next: Geração da aplicação Up: Analisadores léxicos Previous: Especificação das sentenças regulares   Sumário
Ivan L. M. Ricarte 2003-02-14