Skip to content

carlovend/Toy2Compiler

Repository files navigation

Corso di Compilatori A.A. 2023/24

Introduzione

Il seguente documento contiene le specifiche del linguaggio Toy2. Oltre a questo README è presente un altro documento pdf(CompilatoriSpecifiche) dove sono specificate oltre alle specifiche lessicali,sintattiche e semantiche, anche le modifiche effettuate alla gramamtica i test effettuati ed altre eventuali modifiche.

  • La sezione delle specifiche lessicali contiene la lista dei token con i rispettivi pattern.
  • La sezione delle specifiche sintattiche contiene la grammatica utilizzata con tutti i non terminali ed i terminali. Questa sezione contiene anche la tabella delle precedenze e i nodi dell'Abstract Syntax Tree.
  • La sezione delle specifiche semantiche riporta le regole di Type Checking e le tabelle per gli operatori.

Specifiche Lessicali

Token Pattern
VAR var
COLON :
ASSIGN ^;=
SEMI ;
COMMA ,
TRUE true
FALSE false
REAL real
INTEGER integer
STRING string
BOOLEAN boolean
RETURN return
FUNCTION func
TYPERETURN ->$
LPAR (
RPAR )
PROCEDURE proc
WHILE while
ENDPROCEDURE endproc
ENDFUNCTION endfunc
OUT out
WRITE -->
WRITERETURN -->!
DOLLARSIGN $
READ <--
IF if
THEN then
ELSE else
ENDIF endif
ELIF elseif
DO do
ENDWHILE endwhile
PLUS +
MINUS -
TIMES *
DIV /
EQ =
NE <>
LT <
LE <=
GT >
GE >=
AND &&
OR ||
NOT !
ENDVAR \
REF @
ID [a-zA-Z] ([a-zA-Z]
STRING_CONST \"([^"\]|\\.)*\"
INTEGER_CONST [0-9]+
REAL_CONST [0-9]+ ("." [0-9]+)?

Specifiche Sintattiche

Grammatica

Program ::= IterNoProcedure Procedure Iter

IterNoProcedure ::= VarDecls IterNoProcedure
    | Function IterNoProcedure
    | /* empty */

Iter ::= VarDecl Iter
      | Function Iter
      | Procedure Iter
      | /* empty */

VarDecl ::= VAR Decls

Decls ::= Ids COLON Type SEMI Decls
        | Ids ASSIGN Consts SEMI Decls
        | Ids COLON Type SEMI ENDVAR
        | Ids ASSIGN Consts SEMI ENDVAR

Ids ::= ID COMMA Ids
      | ID

Consts ::= Const COMMA Consts
        | Const

Const ::= REAL\_CONST
        | INTEGER\_CONST
        | STRING\_CONST
        | TRUE
        | FALSE

Type ::= REAL
        | INTEGER
        | STRING
        | BOOLEAN

Function ::= FUNCTION ID LPAR FuncParams RPAR TYPERETURN Types COLON Body ENDFUNCTION

FuncParams ::= ID COLON Type OtherFuncParams
            | /* empty */

OtherFuncParams ::= COMMA ID COLON Type OtherFuncParams
                | /* empty */

Types ::= Type COMMA Types
        | Type

Procedure ::= PROCEDURE ID LPAR ProcParams RPAR COLON Body ENDPROCEDURE

ProcParams ::= ProcParamId COLON Type OtherProcParams
            | /* empty */

OtherProcParams ::= COMMA ProcParamId COLON Type OtherProcParams
                | /* empty */

ProcParamId ::= ID
            | OUT ID

Body ::= VarDecl Body
        | Stat Body
        | /* empty */

Stat ::= Ids ASSIGN Exprs SEMI
        | ProcCall SEMI
        | RETURN Exprs SEMI
        | WRITE IOArgs SEMI
        | WRITERETURN IOArgs SEMI
        | READ IOArgs SEMI
        | IfStat SEMI
        | WhileStat SEMI

FunCall ::= ID LPAR Exprs RPAR
          | ID LPAR RPAR

ProcCall ::= ID LPAR ProcExprs RPAR
          | ID LPAR RPAR

IfStat ::= IF Expr THEN Body Elifs Else ENDIF

Elifs ::= Elif Elifs
        | /* empty */

Elif ::= ELIF Expr THEN Body

Else ::= ELSE Body
        | /* empty */

WhileStat ::= WHILE Expr DO Body ENDWHILE

IOArgs ::= IOArgsConcat IOArgs
        | DOLLARSIGN LPAR Expr RPAR IOArgs
        | /* empty */

IOArgsConcat ::= IOArgsConcat PLUS IOArgsConcat
        | STRING\_CONST

ProcExprs ::= Expr COMMA ProcExprs
          | REF ID COMMA ProcExprs
          | Expr
          | REF ID

Exprs ::= Expr COMMA Exprs
        | Expr

Expr ::= FunCall
        | REAL\_CONST
        | INTEGER\_CONST
        | STRING\_CONST
        | ID
        | TRUE
        | FALSE
        | Expr PLUS Expr
        | Expr MINUS Expr
        | Expr TIMES Expr
        | Expr DIV Expr
        | Expr AND Expr
        | Expr OR Expr
        | Expr GT Expr
        | Expr GE Expr
        | Expr LT Expr
        | Expr LE Expr
        | Expr EQ Expr
        | Expr NE Expr
        | LPAR Expr RPAR \%PAR
        | MINUS Expr \%UMINUS
        | NOT Expr

Tabella delle precedenze

La priorità della seguente tabella viene specificata come nell'ordine fornito da Java CUP, riga più in basso equivale a priorità più alta.

Token Associatività
OR SINISTRA
AND SINISTRA
NOT DESTRA
AND SINISTRA
EQ NE SINISTRA
EQ NE LE GE GT LT NON ASSOCIATIVA
PLUS MINUS SINISTRA
TIMES DIV SINISTRA
PROCEDURE SINISTRA

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages