Analizador
Vers˜o corrigida para o texto: a
T. Kowaltowski Implementa¸ao de Linguagens de Programa¸ao. c˜ c˜ Guanabara Dois, 1983.
Gram´tica a
Nota¸˜o: ca
[ ... ] { ... } { ... }+
... ♣ programa := bloco := r´tulos := o constantes ♣ tipos := ...
opcional repeti¸˜o, possivelmente zero vezes ca repeti¸˜o, pelo menos uma vez ca alternativa vers˜o estendida de Pascal a
program identificador ; bloco .
[ r´tulos ] [ constantes ] [ ♣ tipos ] [ vari´veis ] { rotina } corpo o a label lista-de-n´meros ; u := const type var fun¸˜o ca
{ identificador = constante ; }+
{ identificador = tipo ; }+ { lista-de-identificadores : tipo ; }+ procedimento vari´veis := a rotina := fun¸˜o ca :=
function identificador parˆmetros-formais : identificador ; bloco ; a := procedure identificador parˆmetros-formais ; bloco ; a
procedimento corpo := tipo :=
begin comando identificador :=
{ ; comando } end
♣ array [ tipo
♣ constante .. constante ( parˆmetro-formal a parˆmetro-express˜o a a
{ , tipo } ] of tipo
()
parˆmetros-formais a
{ ; parˆmetro-formal } ) a
♣ parˆmetro-fun¸˜o a ca
parˆmetro-formal := a parˆmetro-express˜o a a ♣ parˆmetro-fun¸˜o a ca
♣ parˆmetro-procedimento a
:= :=
[ var ] lista-de-identificadores : identificador function identificador parˆmetros-formais : identificador a := procedure identificador parˆmetros-formais a
♣ parˆmetro-procedimento a
2
comando
:=
[ n´mero : ] comando-sem-r´tulo u o identificador :=
vari´vel := a
{♣
[ lista-de-express˜es ] } o chamada-de-procedimento desvio condicional repetitivo vazio
comando-sem-r´tulo o atribui¸˜o := ca
atribui¸˜o ca composto
vari´vel := express˜o a a := identificador ( lista-de-express˜es ) o identificador ()
chamada-de-procedimento desvio := composto goto n´mero u :=
begin comando-sem-r´tulo o
{ ; comando-sem-r´tulo } end o [ else