PRELIMINARS:
En aquest exercici assumim que heu resolt alguns exercicis anteriors relacionats amb un llenguatge de programació molt bàsic, que queda exemplificat com segueix:
x=3
y=3+x
z=2*(x+y)
Print(z-y+x)
L’execució del programa anterior escriuria per la sortida estandard. Amb anterioritat, heu creat els següents fitxers:
Fitxer evaluate.cpp, que implementa una
funció evaluate, la qual rep un
map<string,int> que guarda els valors de
les variables fins al moment, i un arbre binari que representa una
expressió del llenguatge, i retorna l’avaluació de l’arbre.
Fitxer execute.cpp, que implementa una
funció execute, la qual rep un
map<string,int> que guarda els valors de
les variables fins al moment, i un arbre binari que representa una
instrucció del llenguatge (assignació o escriure), i o bé modifica
l’estat d’una variable (si és una assignació) o bé escriu per la sortida
(si és una escriptura).
Fitxer scanner.cpp, que implementa una
funció scanner, la qual rep un
string amb una instrucció del programa, i
retorna la llista d’elements atòmics del llenguatge que apareixen en
aquest string.
Ara us oferim dos fitxers més, anomenats
parser.hpp i
parser.cpp, que declaren i defineixen una
funció parser, la qual rep una llista
d’elements atòmics del llenguatge que representen una instrucció, i
retorna un arbre binari que representa la mateixa instrucció.
EXERCICI:
Usant les funcions dels fitxers anteriors, haureu de crear un fitxer
program.cpp, amb una funció
main, que implementa un interpret del
llenguatge.
Fixeu-vos que l’enunciat d’aquest exercici ja ofereix uns fitxers que
haureu d’utilitzar per a compilar:
Makefile, program.cpp, BinaryTree.hpp, evaluate.hpp, execute.hpp, scanner.hpp, parser.hpp, parser.cpp, utils.hpp, utils.cpp.
Us falta afegir els fitxers evaluate.cpp,
execute.cpp i
scanner.cpp que teniu fets d’un exercici
anterior, i crear el fitxer program.cpp i
implementar-hi el programa principal. Quan pugeu la vostra solució al
jutge, només cal que pugeu un tar construït
així:
tar cf solution.tar program.cpp execute.cpp evaluate.cpp scanner.cpp
L’entrada té una seqüència linies, on cadascuna és una instrucció del llenguatge.
El programa dona com a sortida el que seria la sortida resultant d’executar la seqüència d’instruccions donada d’entrada.
Autoria: PRO1
Generació: 2026-01-25T21:07:20.410Z
© Jutge.org, 2006–2026.
https://jutge.org