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.
| 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]+)? |
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 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 |