Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Bake a PIE

Bake a PIE

Raquel Oliveira

May 30, 2018
Tweet

More Decks by Raquel Oliveira

Other Decks in Programming

Transcript

  1. DIM0611 Linguagem Exemplos Compilador Demonstra¸ c˜ ao Perguntas Compiladores Bake

    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
  2. DIM0611 Linguagem Exemplos Compilador Demonstra¸ c˜ ao Perguntas Compiladores Roteiro

    1 Linguagem PIE 2 Compilador Bake 3 Demonstra¸ c˜ ao 4 Perguntas 2/25
  3. DIM0611 Linguagem Exemplos Compilador Demonstra¸ c˜ ao Perguntas Compiladores Manual

    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
  4. DIM0611 Linguagem Exemplos Compilador Demonstra¸ c˜ ao Perguntas Compiladores Pascal

    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
  5. DIM0611 Linguagem Exemplos Compilador Demonstra¸ c˜ ao Perguntas Compiladores Restri¸

    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
  6. DIM0611 Linguagem Exemplos Compilador Demonstra¸ c˜ ao Perguntas Compiladores Tipos

    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
  7. DIM0611 Linguagem Exemplos Compilador Demonstra¸ c˜ ao Perguntas Compiladores Constantes,

    Vari´ aveis e Tipos de Usu´ ario 1 const 2 C1 = 0; C2 = "42"; 3 type 4 AlphabetRange = ’a’..’z’; 5 ARange = 0..42; 6 (monday = 1, tuesday, wednesday, 7 thursday, friday, saturday, sunday) Week; 8 AVector = array[ARange] of int; 9 ARecord = record 10 int x; 11 Week y; 12 end; 13 var 14 int a, b; real c; bool d; char e; string f; 15 set of int g; 16 record 17 int x, y; 18 end record_var; 7/25
  8. DIM0611 Linguagem Exemplos Compilador Demonstra¸ c˜ ao Perguntas Compiladores If

    1 if start < stop 2 begin 3 a := m*m; 4 m := m + 1; 5 end; 6 7 if 1 && 0 || !0 8 a := 2; 9 10 if ((a < 2) && (a == 0)) 11 c := 2; 8/25
  9. DIM0611 Linguagem Exemplos Compilador Demonstra¸ c˜ ao Perguntas Compiladores If

    Else 1 if start == stop 2 begin 3 m := m + 1; 4 end 5 else 6 begin 7 a := m - m*m; 8 end; 9/25
  10. DIM0611 Linguagem Exemplos Compilador Demonstra¸ c˜ ao Perguntas Compiladores La¸

    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
  11. DIM0611 Linguagem Exemplos Compilador Demonstra¸ c˜ ao Perguntas Compiladores Procedimento

    1 proc read_arr(TVector vec); 2 var 3 int i; 4 begin 5 writeln(’Informe 10 inteiros:’); 6 for i := FIRST to LAST step 1 do 7 read(vec[i]) 8 end; 11/25
  12. DIM0611 Linguagem Exemplos Compilador Demonstra¸ c˜ ao Perguntas Compiladores Fun¸

    c˜ ao 1 func int func_exemplo(int a; ref int b); 2 type 3 range = record_var->x..vector[0]; 4 begin 5 return 3 6 end 7 end; 12/25
  13. DIM0611 Linguagem Exemplos Compilador Demonstra¸ c˜ ao Perguntas Compiladores An´

    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
  14. DIM0611 Linguagem Exemplos Compilador Demonstra¸ c˜ ao Perguntas Compiladores An´

    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
  15. DIM0611 Linguagem Exemplos Compilador Demonstra¸ c˜ ao Perguntas Compiladores Tradu¸

    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
  16. DIM0611 Linguagem Exemplos Compilador Demonstra¸ c˜ ao Perguntas Compiladores Tradu¸

    c˜ ao Atributos: string cs; ST st; string type; vector<string> ids; Ids_info ids_info; string afterlabel; string id_token; string arraybody; RangeAttrs ra; 17/25
  17. DIM0611 Linguagem Exemplos Compilador Demonstra¸ c˜ ao Perguntas Compiladores Tradu¸

    c˜ ao Tabela de s´ ımbolos (ST): string cs; map<string,string> st; vector<map<string,string>> struct_STs; map<string,int> struct_ST_idx; vector<ArrayAttrs> array_STs; map<string,int> array_ST_idx; vector<RangeAttrs> range_STs; map<string,int> range_ST_idx;} 18/25
  18. DIM0611 Linguagem Exemplos Compilador Demonstra¸ c˜ ao Perguntas Compiladores Tradu¸

    c˜ ao Exemplo da gram´ atica de atributos: Atributos PROCEDURE st(herdado) cs(sintetizado) PARAM st(sintetizado) cs(sintetizado) DECL st(sintetizado) cs(sintetizado) BLOCK st(herdado) cs(sintetizado) id lexeme(sintetizado) 1 <procedure> ::= proc id ‘(’ <param> ‘)’ ‘;’ <decl> <block> {BLOCK.st =st_union(PARAM.st,st_union(DECL.st,PROCEDURE.st)); PROCEDURE.cs = "void " + id.lexeme + "(" + PARAM.cs + ") {\n" + DECL.cs + BLOCK.cs + "\n}\n"; } 19/25
  19. DIM0611 Linguagem Exemplos Compilador Demonstra¸ c˜ ao Perguntas Compiladores Tradu¸

    c˜ ao 1 <procedure> ::= proc id ‘(’ <param> ‘)’ ‘;’ <decl> <block> {BLOCK.st =st_union(PARAM.st,st_union(DECL.st,PROCEDURE.st)); PROCEDURE.cs = "void " + id.lexeme + "(" + PARAM.cs + ") {\n" + DECL.cs + BLOCK.cs + "\n}\n"; } Figure: Grafo de dependˆ encia para a regra de produ¸ c˜ ao de PROCEDURE 20/25
  20. DIM0611 Linguagem Exemplos Compilador Demonstra¸ c˜ ao Perguntas Compiladores Tradu¸

    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
  21. DIM0611 Linguagem Exemplos Compilador Demonstra¸ c˜ ao Perguntas Compiladores Factorial

    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
  22. DIM0611 Linguagem Exemplos Compilador Demonstra¸ c˜ ao Perguntas Compiladores Factorial

    factorial.c 1 #include <stdio.h> 2 int main() { 3 printf("%s\n", "Please Input an Integer"); 4 scanf("%i", &num); 5 _$1: 6 if(getchar() == ’\n’) goto _$2; 7 goto _$1; 8 _$2:; 9 sum = 1; 10 i=1; 11 _$3: 12 if (i>num) goto _$4; 13 sum = sum * i; 14 i+=1; 15 goto _$3; 16 _$4:; 17 printf("%s", "Result: ");printf("%i\n", sum); 18 return 0; 19 } 24/25