Construção e
Optimização de Compiladores
Trabalho prático
2005/2006
Fase 1 -- Representação
Intermédia
Construa um programa (numa linguagem de programação
à sua escolha) que receba como input um ficheiro de texto com
código de representação intermédia e crie
as estruturas de dados necessárias a um posterior processamento
e geração de código MIPS.
O ficheiro de texto deverá ter a seguinte estrutura:
codigo := funcao*
funcao := nome "(" type* ")" level returnvalue variaveis statements
"end"
type := "INT" " "
level := int
returnvalue := type
variaveis := "VAR" type* ";"
statements := statement*
statement := move | expression | jump | cjump | seq | label
move := "MOVE" "(" exp "," exp ")" ";"
expression := "EXP" "(" exp ")" ";"
jump := "JUMP" "(" exp ")" ";"
cjump := "CJUMP" "(" relop "," exp "," exp "," nome "," nome ")" ";"
seq := "SEQ" "(" statement "," statement ")" ";"
label := "LABEL" "(" nome ")" ";"
relop := "<" | "<=" | "=" | "!=" | ">" | ">="
exp := const | name | temp | binop | mem | call | eseq | var | arg | ret
const := "CONST" "(" int ")"
name := "NAME" "(" string ")"
temp := "TEMP" "(" string ")"
binop := "BINOP" "(" op "," exp "," exp ")"
op := "'+" | "-" | "*" | "/"
mem := "MEM" "(" exp ")"
call := "CALL" "(" exps ")"
exps := exp
exps := exp "," exps
eseq := "ESEQ" "(" statement "," exp ")"
var := "VAR" "(" level "," int ")"
arg := "ARG" "(" level "," int ")"
ret := "RET"
nome := [A-Za-z]+
int := [0-9]+