Autor: [Maria Cleto Rocha]
Número: [A104441]
Este 6º TPC foi desenvolvido no âmbito da Unidade Curricular de Processamento de Linguagens.
O objetivo é construir um parser recursivo descendente LL(1) que reconheça e avalie expressões aritméticas com parêntesis, inteiros e operadores binários (+, -, *, /).
O programa foi dividido em dois módulos principais:
- Um analisador léxico (
calc_lex.py) que transforma a expressão numa lista de tokens; - Um analisador sintático (
calc_parser.py) que segue uma gramática LL(1) e calcula o valor da expressão.
NUM: números inteiros (ex: 3, 10, 42)SOMA: operador de adição (+)SUB: operador de subtração (-)MUL: operador de multiplicação (*)DIV: operador de divisão (/)LPAR/RPAR: parêntesis esquerdo e direito ((e))EOF: fim da expressão
Expr → Term Expr’
Expr’ → + Term Expr’ | - Term Expr’ | ε
Term → Factor Term’
Term’ → * Factor Term’ | / Factor Term’ | ε
Factor → (Expr) | NUM
- O
Lexerpercorre a string da expressão e devolve uma lista de tokens. - O
Parseraplica recursivamente as regras da gramática para processar os tokens e calcular o valor. - O resultado final da expressão é impresso no terminal.
$ python3 main.py
Expressão (ENTER para sair): 2+3
Resultado: 5
Expressão (ENTER para sair): 67-(2+3*4)
Resultado: 53
Expressão (ENTER para sair): (9-2)*(13-4)
Resultado: 63-
calc_lex.py:- Define os padrões dos tokens com expressões regulares.
- Gera uma lista de tokens a partir da expressão inserida.
-
calc_parser.py:- Implementa um analisador LL(1) recursivo descendente.
- Avalia a expressão aritmética ao mesmo tempo que faz a análise sintática.
-
main.py:- Interface interativa com o utilizador.
- Lê input, passa pelo lexer e parser, e mostra o resultado.
calc_lex.py— Analisador Léxicocalc_parser.py— Parser Recursivo Descendentemain.py— Interface de teste
Para executar o TPC6, é necessário ter o Python 3 instalado e posteriormente escrever:
python3 main.pyInsere expressões como 2+3 ou (5+4)*2 e o resultado será calculado automaticamente.
