GithubHelp home page GithubHelp logo

jjocram / simplanplus Goto Github PK

View Code? Open in Web Editor NEW
3.0 3.0 1.0 788 KB

Compiler and runner of the SimpLanPlus language, developed as project for the course "Compilatore e Interpreti" (compilers and interpreters) at UniBO, AY 2020/21

Java 85.34% ANTLR 1.13% TeX 13.52%

simplanplus's Introduction

Hi everyone 👋

📍 I'm Marco Ferrati, a PhD student in Computer Science at the University of Bologna.

💻 jjocram.com ⇒ If you are curious about my projects and my contacts, you can find them and other information on my portfolio-website.

simplanplus's People

Contributors

jjocram avatar tommasoazz avatar

Stargazers

 avatar  avatar

Watchers

 avatar

simplanplus's Issues

Ricontrollare espressioni

Bisogna impedire (nella Semantic Analysis) espressioni del tipo

int a = new int + 13
^int b = new int + new int

Modifiche a NewExpNode

Le modifiche alla NewExpNode, che aggiungono la nozione di tipo nell'espressione, permettono di fare type checking più adeguato nelle dichiarazioni ed assegnazioni.
Sfruttarlo, rimuovendo i controlli di nullità introdotti per supportare l'assenza della conoscenza del tipo usato per l'allocazione di spazio nello heap da parte della new.

Type checking

Verificati i seguenti
Check list:

  • ArgNode (null)
  • IdNode (int, bool, pointer, funtype, tutti presi dalla Symbol Table o \Gamma)
  • LhsNode (int, bool, pointer)
  • (Node)
  • value/
    • BoolNode (bool)
    • NumberNode (int)
  • type/
    • BoolTypeNode (null)
    • FunTypeNode (null)
    • IntTypeNode (null)
    • PointerTypeNode (null)
    • (TypeNode)
    • VoidTypeNode (null)
  • statement/
    • AssignmentNode (null)
    • AssigtStatNode (= AssignmentNode)
    • BlockNode (void o tipo ritornato dallo statement return)
    • BlockStatNode (= BlockNode)
    • CallNode (tipo ritornato dalla funzione)
    • CallStatNode (= CallNode)
    • DeletionNode (null)
    • DeletStatNode (= DeletionNode)
    • IteNode (tipo ritornato da entrambi i rami, deve essere uguale)
    • IteStatNode (= IteNode)
    • PrintNode (null)
    • PrintStatNode (= PrintNode)
    • RetNode (tipo ritornato dall'espressione)
    • RetStatNode (= RetNode)
    • (StatementNode)
  • expression/
    • BaseExpNode (= espressione figlia)
    • BinaryExpNode (bool oppure int in base all'operatore)
    • CallExpNode (tipo ritornato dalla funzione chiamata)
    • DereferenceExpNode (bool oppure int oppure puntatore+ a bool o int)
    • (ExpNode)
    • NegativeExpNode (int)
    • NewExpNode (null) N.B. Ritornato null perché ritornare il tipo della LHS è complicato e scorretto nella visita dell'albero quindi meglio null
    • NotExpNode
  • declaration/
    • DecFunNode (null)
    • DeclarateFunNode (= DecFunNode)
    • DeclarateVarNode (= DecVarNode)
    • (DeclarationNode)
    • DecVarNode (null)

Relazione di Compilatori e Interpreti

  • Abstract [MARCO]
  • Introduzione [TOMMASO]
    • Scopo progetto
    • Tecnologie utilizzate
  • Grammatica [TOMMASO] manca cappello introduttivo
  • Analisa Semantica [DA VEDERE ASSIEME]
    • Struttura ambiente
    • (cosa e come viene controllato)
      • variabili/funzioni non dichiarate
      • variabili dichiarate piu` volte nello stesso ambiente
      • corretto uso dei puntatori
      • parametri attuali non conformi ai parametri formali
  • Analisi degli effetti [DA VEDERE ASSIEME]
    • (cosa e come viene controllato)
      • uso di variabili non inizializzate
      • parametri attuali non conformi ai parametri formali (inclusa la verifica sui parametri passati per puntatore)
  • Type checking [MARCO]
    • la correttezza dei tipi
  • Interprete [MARCO]
    • Descrizione del bytecode
    • Descrizione CPU/Memoria
    • Record di attivazione
    • Funzionamento interprete
  • Struttura di SimpLanPlus.java [TOMMASO]
  • Esempi (valori attesi e spiegazione degli errori che vengono individuati)
    • example1 -> funzionamento puntatori [MARCO]
    • example2 -> identificazione uso errato dei puntatori [MARCO]
    • example3 -> identificazione uso errato dei puntatori [MARCO]
    • example8 -> esempio Stack overflow [MARCO]
    • example16 -> mutua ritorsione non possibile [TOMMASO]
    • example20 -> Fibonacci [TOMMASO]
    • example25 -> Analisi degli effetti e punto fisso [TOMMASO]
  • -Appendice- Guida all'installazione [MARCO]
  • -Appendice- Riferimenti [TOMMASO}

Effect analysis

Regole da implementare per analisi degli effetti:

  • Exp-e (pag. 53), con tanto di funzione ausiliaria che recupera identificatori usati nell'espressione, definito in ExpNode
    • BaseExpNode
    • BinaryExpNode
    • NegativeExpNode
    • NotExpNode
  • Asgn-e (pag. 53)
    • AssignmentNode ???
  • Del-e (pag. 53)
    • DeletionNode
  • If-e (pag. 53)
    • IteNode
  • Block-e (pag. 54) funziona per ricorsività, non serve fare nulla BELLA
  • Var-e (pag. 55), di default alla creazione della STEntry
    • DecFunNode
    • DecVarNode
  • Invk-e (pag. 56) (N.B. è chiamata di funzione)
  • Fseq-e (pag. 57) (N.B. è dichiarazione di funzione)

Problemi vari scovati

  • Esempio 2 lancia una NullPointerException
  • Cambiare la descrizione dell'esempio 3 cambiando i messaggi di errore.
  • Aggiornare descrizione Esempio 5
  • Non è impedito l'uso di puntatori a INITIALIZED (o almeno credo, esempio 15 mi attenderei errori)
  • Esempio 16 lancia una NullPointerException nello stesso contesto di 2 (atteso una missing declaration)

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.