Uma linguagem de programação para o ambiente Virtuosi Aron Borges [email protected] ORIENTADOR: Alcides Calsavara [email protected] Introdução Monitoria Virtuosi Proximidade da Sintaxe Aron Borges Programação Imperativa; Ensino; Rigor do paradigma O.O; Java e não Eiffel. Implementação do Compilador e Semântica Formal 2 Exemplo Código escrito em C++: int x = 3; int y = 11; if(x > y) { ... } Código escrito em Aram: Inteiro x = Inteiro.make(3); Inteiro y = Inteiro.make(11); if(x.maior(y)) { ... } Aron Borges Implementação do Compilador e Semântica Formal 3 Os qualificadores associação e composição Exemplo de Associação: class Person { association Vehicle car; } Exemplo de Composição: class Person { composition String name; } Aron Borges Implementação do Compilador e Semântica Formal 4 Qualificadores das Operações e Lista de Exportação class Boolean { constructor make() exports { all } { ... } method void flip() exports { none } { ... } action equals(Boolean b) exports { A, B } { ... } } Aron Borges Implementação do Compilador e Semântica Formal 5 Ações Uma ação é um tipo especial de operação que define um desvio condicional de uma sentença; Ela é o único tipo de operação que pode ser chamada em uma avaliação de expressão. Aron Borges Implementação do Compilador e Semântica Formal 6 Exemplo de Ação class Boolean { ... action default() exports { all } { ... execute; } action equals(Boolean b) exports { all } { ... skip; } } ... Boolean a = Boolean.make(true); Boolean b = Boolean.make(false); if(a) { ... } if(a.equals(b)) { ... } ... Aron Borges Implementação do Compilador e Semântica Formal 7 Classes da biblioteca padrão Boolean; Integer; Character; String; DataBlock Aron Borges Implementação do Compilador e Semântica Formal 8 DataBlock Chamadas de Sistema: … datablock dados; datablock copia; System.createDataBlock(dados, 32); System.createDataBlock(copia, 32); System.storeInteger(dados, 1); System.cloneDataBlock(copia, dados); … Abstração da linguagem, encapsulando as chamadas de sistema: … datablock dados = datablock.make(32); datablock copia = datablock.make(32); dados.storeInteger(1); copia = dados.clone(); … Aron Borges Implementação do Compilador e Semântica Formal 9 Componentes e Pacotes do Compilador Aron Borges Implementação do Compilador e Semântica Formal 10 Exemplo de código fonte class Pessoa { } class Veiculo { composition Integer posicao; association Pessoa motorista; constructor instanciar(Pessoa p) exports { all } { motorista = p; posicao = Integer.make(0); } } Aron Borges Implementação do Compilador e Semântica Formal 11 Analise Léxica e Sintática Aron Borges Implementação do Compilador e Semântica Formal 12 Árvore Gramatical Resultante (Saída do ANTLR) ( CLASS [Pessoa,<an identifier>] CLASS_ELEMENTS ) ( CLASS [Veiculo,<an identifier>] ( CLASS_ELEMENTS ( VARIABLE ( RELATIONSHIP COMPOSITION ) ( TYPE [Integer,<an identifier>] ) [posicao,<an identifier>] ) ( VARIABLE ( RELATIONSHIP ASSOCIATION ) ( TYPE [Pessoa,<an identifier>] ) [motorista,<an identifier>] ) ( CONSTRUCTOR ( FEATURE [instanciar,<an identifier>] ( FORMAL_PARAMETERS ( FORMAL_PARAMETER ( TYPE [Pessoa,<an identifier>] ) [p,<an identifier>] ) ) ( EXPORTS ( EXPORT_LIST EXPORT_ALL ) ) ( [{,<STATEMENT_LIST>] [motorista,<an identifier>] ( [=,<PREROGATIVE>] [p,<an identifier>] ) [posicao,<an identifier>] ( [=,<PREROGATIVE>] ( [(,<INVOCATION_CALL>] [Integer,<an identifier>] [make,<an identifier>] ( ACTUAL_LIST ( ACTUAL_PARAMETER [0,<CARDINAL_LITERAL>] ) ) ) ) ))) Aron Borges Implementação do Compilador e Semântica Formal 13 Geração do Código Intermediário Aron Borges Implementação do Compilador e Semântica Formal 14 Código Intermediário Resultante Aron Borges Implementação do Compilador e Semântica Formal 15 Validação do Código Aron Borges Implementação do Compilador e Semântica Formal 16 Geração de Código Objeto Aron Borges Implementação do Compilador e Semântica Formal 17 Código Objeto Resultante Aron Borges Implementação do Compilador e Semântica Formal 18