Git Product home page Git Product logo

a3s2comp's Introduction

**PROJECT TITLE: miniJavi

**GROUP: 31

NAME1: Ricardo Manuel Gonçalves da Silva, NR1: 201607780, GRADE1: 17, CONTRIBUTION1: 25%

NAME2: Luis Ricardo Marques Oliveira, NR2: 201607946, GRADE2: 17, CONTRIBUTION2: 25%

NAME3: Duarte Miguel de Novo Faria, NR3: 201607176, GRADE3: 17, CONTRIBUTION3: 25%

NAME4: Miguel Dias de Carvalho, NR4: 201605757, GRADE4: 17, CONTRIBUTION4: 25%

GLOBAL Grade of the project: 17

** SUMMARY:

O nosso compilador compila código em Java--, utilizando uma gramatica LL(1) com lookaheads(2) locais e transforma em bytecodes Java, analisando o código lexical, sintactica e semanticamente e no final gerando o código correspondente de acordo com o Jasmin. As funções do nosso compilador também incluiem o output de erros semanticos que informam o utilizador onde é que o código deve ser melhorado.

** EXECUTE: (indicate how to run your tool)[TODO]:retirar o que está a mais

Para compilar o código fonte, precisa-se de javacc e de jjtree, por isso deve-se executar sequencialmente: jjtree Jmm.jjt javacc Jmm.jj javac -verbose *.java java MainProject //ex:java MainProject codeTestingFile java -jar miniJavi.jar java -jar jasmin.jar _jasmim_generated.j

**DEALING WITH SYNTACTIC ERRORS: (Describe how the syntactic error recovery of your tool does work. Does it exit after the first error?)

O analisador sintático percorre o código e mal apanha um erro termina logo mas apanha todos os erros de sintaxe.

**SEMANTIC ANALYSIS: (Refer the semantic rules implemented by your tool.)

Na análise semântica, lemos a AST e preenchemos as Symbol Tables ao mesmo tempo que detectamos erros.

Faz recuperação de erros nas condições do while. Ou seja, mal apanhe um erro semântico na condição do while salta para o fim da terminação e continua a analisar o resto do código.

A nossa symbol table tem como filhos uma linked list de symbol tables. Cada symbol table tem um hashmap de variaveis e/ou outro de parametros. Estes hashmaps são compostos por um par com o nome do elemento como chave e o próprio elemento como parametro. Cada elemento pode ter os seguintes atributos: name, type, isInitialized, arguments, value e return value;

Mete todos os erros que existem numa estrutura de dados e depois efectua a impressão de todos os erros e sai.

O nosso compilador implementa todas as regras semanticas da linguagem Java--, nomeadamente:

  • Declarações / inicializações de variáveis
  • Tipos e numero de argumentos das chamadas de funções
  • Verifica diferentes tipos de variáveis ao atribuir valores a uma variável e aquando de oprações/comparações
  • Se o tipo da variável de saída é compatível com o retorno da função

**INTERMEDIATE REPRESENTATIONS (IRs):

Não temos Representações Intermédias.

**CODE GENERATION:

Através do padrão visitor, a AST é visitada recuursivamente é feita a impressão de comandos Jasmin para cada nó no ficheiro.

**OVERVIEW: (refer the approach used in your tool, the main algorithms, the third-party tools and/or packages, etc.)

Usamos o JavaCC para fazer o parsinng dos ficheiros e criar a nossa AST.

Usamos o Jasmin para transformar os ficheiros de bytecodes Java em ficheiros .class.

Implementamos o padrão de desenho Visitor de acordo com o desenho criado pelo colectivo Gang Of Four. O objectivo deste design pattern é o de definir uma nova operação sem introduzir modificações numa estrutura de objectos já existente.

A nossa aplicação funciona em três fases, todas elas usando o padrão Visitor: Numa primeira fase é feita a análise sintatica. A análise semantica é efectuada numa segunda fase. Por fim dá-se a geração de código, através do padrão visitor, é feita a impressão de comandos Jasmin no ficheiro.

**TASK DISTRIBUTION:

Todos os membros: Desenvolvimento da gramática. Conversão da gramática para o formato LL(). Mecanismo de tratamento e recuperação de erros. Criação da tabela de simbolos. Desenvolvimento da analise semantica. Desenvolvimento da análise de código. Testes e debug.

**PROS:

Está tudo funcional, exceptuando os arrays. Tirando isso é um compilador completamente funcional. Implementação do design pattern Visitor, que implica menos código. Gramática LL(1) com poucos LL(2) locais. A construção de uma tabela de simbolos muito útil.

**CONS:

Não implementamos a geração de código para arrays nem quaisquer optimizações. Podiamos ter estruturado melhor o código.

a3s2comp's People

Contributors

tejinaco avatar mehr-licht avatar duartefaria avatar migudmigu avatar

Stargazers

 avatar

Watchers

 avatar

a3s2comp's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.