a PIE Breno Viana Fernanda Isabel Luiz Arthur Raquel Oliveira V´ ıtor Godeiro Universidade Federal do Rio Grande do Norte Departamento de Inform´ atica e Matem´ atica Aplicada DIM0611 – Compiladores 30-05-2018 1/25
Compila¸ c˜ ao make Cria¸ c˜ ao do c´ odigo intermedi´ ario ./bake path of file.pie Cria¸ c˜ ao do Execut´ avel gcc -o nome executavel generated code/name of file.pie Exemplo make ./bake strawberry.pie gcc -o yummy generated code/strawberry.c ./yummy 3/25
Linguagem de programa¸ c˜ ao estruturada; Criada em 1970 pelo sui¸ co Niklaus Wirth; Programa ´ e composto de constantes e vari´ aveis globais, procedimentos, fun¸ c˜ oes e um programa principal. Exemplo Ol´ a Mundo program OlaMundo; begin WriteLn(‘Ol´ a, Mundo!’); end. 4/25
c˜ oes da linguagem PIE - Pascal Improved Experience Pr´ e-definidas: Pascal-like; Inglˆ es; N˜ ao deve possuir while, repeat until; Deve possuir um loop geral e permitir uma sa´ ıda do loop (exitwhen); Tipagem fraca. Definidas pelo grupo: Identificadores podem come¸ car apenas com letras, podem ter n´ umeros e underline (“ ”) em sua estrutura; Labels devem come¸ car com @ e devem ser seguidos de letras e/ou underline. 5/25
Tipo Formato dos valores int -100 100 real -100.001 100.001 char ‘a’ ‘z’ bool true false string “a” “aaa” range -100..100 a..z array [1..10, 0..3] [‘a’..‘z’, ‘c’..‘g’] set of int of char enum (a, b, c) (a=7, b, c) record int x; char y; range z; int x; usertype1 y; usertype2 z; 6/25
co de itera¸ c˜ ao 1 for a := 1 to 5 step 1 do 2 a:= m + 1; 3 4 5 for b := 6 to 1 step -2 do 6 begin 7 a:= m + 1; 8 end; 9 10 for record_var->x := 300 to 20 step -40 do 11 begin 12 a:= m + 1; 13 end; 10/25
alise L´ exica Gram´ atica Livre de Contexto na forma BNF; Definir as palavras reservadas; Dividir o c´ odigo em tokens; Recuperar valores da linha e coluna para tratamento de erros; Aux´ ılio da ferramenta Lex. 13/25
alise Sint´ atica Verifica o formato das instru¸ c˜ oes da linguagem; Descendente; • Gram´ atica no formato LL(1); • Parser LL(1); • Dois tipos: recursivo e por tabela. Ascendente; • Gram´ atica no formato LL(1) e LALR(1); • Parser LALR(1); • YACC (parser bottom up Shift/Reduce -LALR(1)). 14/25
c˜ ao Gram´ atica da linguagem no formato LL(1) e LALR(1); Gram´ atica de atributos; • L-Attributed (possui atributos herdados e sintetizados). Esquema de tradu¸ c˜ ao dirigido pela sintaxe (implementa¸ c˜ ao da gram´ atica de atributos); • Feito com o parsing bottom up atrav´ es do YACC; • Cria regras de produ¸ c˜ ao extras quando s´ ımbolos tem atributos herdados que dependem de s´ ımbolos em posi¸ c˜ oes diferentes em regras diferentes. 16/25
c˜ ao Coisas que n˜ ao s˜ ao traduzidas: • subprogramas aninhados (n˜ ao existem em c); • passagem de parˆ ametros por referˆ encia (n˜ ao existe em c); • set e range (n˜ ao existem em c); • struct de struct ou de array (faltou implementar); • array de struct ou de array (faltou implementar); • switch/case (faltou implementar). 21/25
factorial.pie 1 program factorial; 2 3 var 4 int num, sum, i; 5 6 begin 7 writeln("Please Input an Integer"); 8 readln(num); 9 sum := 1; 10 for i := 1 to num step 1 do 11 sum := sum * i; 12 write("Result: "); 13 writeln(sum) 14 end. 23/25