Arquitetura — Léxico
O módulo léxico é responsável pela primeira etapa do processo de compilação, realizando a leitura do código-fonte e convertendo os caracteres de entrada em tokens válidos para as próximas fases do compilador.
O analisador léxico foi desenvolvido utilizando a ferramenta Flex.
Objetivo
O objetivo do módulo léxico é identificar padrões pertencentes à linguagem C e transformá-los em unidades léxicas compreensíveis pelo analisador sintático.
Responsabilidades
O analisador léxico é responsável por:
- Ler o código-fonte caractere por caractere
- Reconhecer tokens da linguagem
- Ignorar espaços em branco e comentários
- Identificar palavras reservadas
- Identificar operadores e delimitadores
- Reconhecer identificadores
- Reconhecer constantes numéricas e literais
- Reportar erros léxicos
Tokens Reconhecidos
Palavras-chave
int
float
char
if
else
while
for
return
main
Operadores
+
-
*
/
%
=
==
!=
<
>
<=
>=
Delimitadores
;
,
(
)
{
}
Identificadores
Variáveis e nomes definidos pelo usuário.
Exemplo:
contador
resultado
valorFinal
Fluxo Léxico
Código Fonte
↓
Leitura de Caracteres
↓
Reconhecimento de Padrões
↓
Geração de Tokens
↓
Envio ao Parser
Ferramenta Utilizada
| Ferramenta | Finalidade |
|---|---|
| Flex | Geração automática do analisador léxico |
Estrutura do Arquivo Léxico
lexer.l
O arquivo contém:
- Definições de tokens
- Expressões regulares
- Regras léxicas
- Código auxiliar em C
Exemplo de Funcionamento
Entrada
int x = 10;
Tokens Gerados
INT
IDENTIFIER(x)
ATRIB
NUMBER(10)
PONTO_VIRGULA
Tratamento de Erros Léxicos
O analisador léxico é capaz de identificar caracteres inválidos ou padrões não reconhecidos.
Exemplo:
Erro léxico: caractere inválido '@'
Considerações
A implementação léxica foi desenvolvida visando simplicidade, modularidade e facilidade de integração com o analisador sintático.
Além disso, sua estrutura permite expansão futura para suporte a novos tokens e construções da linguagem C.
Histórico de Versões
| Versão | Data | Descrição | Autor(es) |
|---|---|---|---|
1.0 |
30/04/2026 | Criação da documentação do módulo léxico | Arthur Fernandes |