Autor: [Maria Cleto Rocha]
Número: [A104441]
Este ficheiro foi desenvolvido no âmbito da Unidade Curricular de Processamento de Linguagens. O objetivo do mesmo é implementar um analisador léxico que processa códigos, extraindo e classificando os diferentes tokens presentes no código.
A aplicação utiliza expressões regulares para identificar e diferenciar elementos como comentários, strings, números, variáveis, palavras-chave e identificadores, permitindo assim a análise e interpretação do código fornecido.
-
Definição dos Tokens:
- São definidas diversas especificações de tokens, cada uma associada a uma expressão regular.
- Exemplos:
COMMENTpara comentários (iniciados por#);STRINGpara literais de string delimitados por aspas;NUMBERpara sequências numéricas;VARIABLEpara variáveis que iniciam com?;KEYWORDpara palavras reservadas comoselect,SELECT,WHERE,whereeLIMIT;IDENTIFIERpara nomes que seguem um padrão de identificador.
-
Processo de Tokenização:
- A função
tokenize(code)compila todas as expressões regulares num único padrão e percorre o código utilizandore.finditer. - Para cada correspondência encontrada, o token é classificado de acordo com o seu tipo.
- Tokens de espaços em branco e comentários são ignorados.
- Caso seja detectado um caractere que não se enquadre em nenhum token (definido como
MISMATCH), é levantada uma exceção.
- A função
-
Exemplo de Execução:
- Ao executar o script, um exemplo de código (contendo uma consulta similar a SPARQL) é analisado e os tokens extraídos são impressos no terminal.
-
Função
tokenize(code):- Construção do Regex:
- Cria uma expressão regular composta, combinando todas as especificações de tokens.
- Iteração e Classificação:
- Utiliza
re.finditerpara identificar e classificar cada token presente no código. - Converte tokens numéricos para inteiros e ignora espaços e comentários.
- Utiliza
- Gestão de Erros:
- Se um caractere não corresponder a nenhum padrão esperado, o programa gera um erro com uma mensagem de "Caractere inesperado".
- Construção do Regex:
-
Bloco Principal (
if __name__ == '__main__':):- Define um exemplo de código que simula uma consulta com uma sintaxe similar a SPARQL.
- Chama a função
tokenizepara processar o exemplo e imprime os tokens resultantes.
O código completo pode ser encontrado no seguinte repositório:
🔗 analisadorlex.py
Para executar o analisador léxico, certifique-se de ter o Python 3 instalado e utilize o comando abaixo (garantindo que o script se encontra na mesma pasta):
python3 analisadorlex.py
