Prova De Processamento de Dados I

Propaganda
28/10/99
Segundo Trabalho de LP
Linguagem C++
Prof. Flávio Miguel Varejão
ProLis ("Programação com Listas") é uma linguagem de programação especialmente
criada para este trabalho. ProLis é inspirada em LISP e, como consequência, possui
muitas das características desta linguagem. Por outro lado, ProLis é uma linguagem mais
simples e menos expressiva que LISP.
ProLis possui um conjunto pequeno e restrito de tipos de dados, organizados numa
hierarquia, como mostra a figura abaixo:
Base
Lógico
Símbolo
Átomo
Lista
String
Número
Apresenta-se, a seguir, uma especificação mais detalhada dos tipos usados na construção
de programas em ProLis:
1. Lógico
Valores: v ou f
Operações: e ou nao se
2. Símbolo
Valores: nomes de operações dos outros tipos
Exemplos de Valores:    e primeiro resto se nao
3. String
Valores: conjunto de cadeias de caracteres delimitados por ""
Exemplos de Valores: "Flavio" "adicao" "char" "323" "3det 5"
Exemplos de Operações:  <> == 
4. Número
Valores: intervalo do conjunto dos números reais
Exemplos de Valores: 2 3 12.34 77 8.82
Operações:    / < <= > >= = <>
5. Lista
Valores: listas de valores do tipo base
Exemplos de Valores: nil ( ) (2 3 5) (2 3.2 "Flavio") (2 (3 4 5) (7 8)) (* 2 3)
Exemplos de Operações: primeiro resto vazia insereInic insereFim  == <>
A sintaxe das expressões em ProLis é equivalente a de LISP, tendo por base o uso de
parênteses e a notação pré-fixada. Alguns exemplos de expressões ProLis são mostradas
a seguir:
3
3.2
"Aline"
( (3 4 5) nil (1 2.1) )
v
( 3 2)
( 1 2 3 4 5)
("noite" "lua" "dia" "sol")
(== (< ( 2 3 4) 10) "lua")
Crie em C++ uma hierarquia de classes que implemente os tipos de dados de ProLis.
Utilize esta hierarquia para implementar um avaliador de expressões de ProLis. Seguemse exemplos de uso deste interpretador:
? ( 3 2)
5
? ( < 1 2.3 )
v
? (3 2)
(3 2)
? (e v v)
v
? (3 ( 2 2) "Flavio")
(3 4 "Flavio")
? (e v f)
f
? ( "Flavio " "Miguel")
"Flavio Miguel"
? ( 2 "nd")
"2nd"
? (se (< ( 3 2) ( 3 2) ) nil (3 4 5))
(3 4 5)
? ( "trab" 2)
"trab2"
? (primeiro (1 2 3 4 5) )
1
? ( "insere" "Fim")
insereFim
? (resto (1 2 3 4 5) )
(2 3 4 5)
? ( (( "insere" "Inic") ("Flavio" 5)
3) (7 8 (9 10) )
("Flavio" 5 3 7 8 (9 10) )
? (concatena (1 2) (3 4))
(1 2 3 4)
?()
nil
? ( 2 1.5)
3.0
? ( 3 "Flavio" (< (+ 5 2) 8) (primeiro
(7 6 5) ) )
(3 "Flavio" f 7)
? ( ( "insere" (se (> 2 3) "Inic"
"Fim") 0 (1 2 3 ) )
(1 2 3 0)
Download