Στόχος του project είναι η μεταγλώττιση μιας αυτοσχέδιας συναρτησιακής προγραμματιστικής γλώσσας(Minimal++). Το αρχείο εξόδου θα είναι σε Assembly.
<program> ::= program id { }
<block> ::=
<declarations> ::= (declare ;)
<varlist> ::= ε | id (, id)
<subprograms> ::= ()
<subprogram> ::= function id | procedure id
<funcbody> ::= { }
<formalpars> ::= ( )
<formalparlist> ::= (, ) | ε
<formalparitem ::= in id | inout id
<statements> ::= | { (; )* }
<statement> ::= <assignment_stat>
| <if_stat>
|
| <forcase_stat>
| <call_stat>
| <return_stat>
| <input_stat>
| <print_stat>
<assignment_stat> ::= id :=
<if_stat> ::= if () then
<elsepart> ::= ε | else
<whilestat> ::= while ()
<forcase_stat> ::= forcase ( when () : )* default:
<return_stat> ::= return
<call_stat> ::= call id
<print_stat> ::= print ()
<input_stat> ::= input (id)
<actualpars> ::= ()
<actualparlist> ::= (, )* | ε
<actualparitem> ::= in | inouttk id
<condition> ::= (or )
<boolterm> ::= (and )
<boolfactor> ::= not [] | [] | <relational_oper>
<expression> ::= <optional_sign> (<add_oper> )
<term> ::= (<mul_oper> )
<factor> ::= constant | () | id <idtail
<idtail> ::= ε |
<relational_oper> ::= = | <= | >= | < | > | <>
<add_oper> ::= + | -
<mul_oper> ::= * | /
<optional_sign> ::= ε | <add_oper>
Comments:
- Multiple lines: <</>>, <</>>
- Single line: <<//>>
- min_compiler.py
- Give a file
- Output files:
- semi_code.int
- semi_code.c
- final_code.asm
Αποτελείται από αριθμημένες τετράδες.
Πράξεις:
- +, a, b, t_1 (a+b). Εκχωρούμε την πράξη σε μια προσωρινή μεταβλητή.
- -, *, /. Το ίδιο.
:=, x, _, z (z := x)
Jump(goto):
jump, _, _, 100. Θα πάει στην τετράδα 100.
Συγκρίσεις:
- =, x, y, z (x=z). Αν ισχύει η σύγκριση θα μεταπηδήσει στο z(αριθμός τετράδας).
- >=, <=, >, <, <>. To ίδιο.
begin_block, name, _, _
Τέλος main ή συναρτήσεων:
end_block, name, _, _
Τερματισμός προγράμματος:
halt, _, _, _
Παράμετροι:
par, x, m, _
Όπου x:
- CV: Μετάδοση τιμής.
- REF: Μετάδοση με αναφορά.
call, name, _, _
Επιστροφή τιμής συνάρτησης:
ret, x, _, _
Μεταγγλωτισμένο σε C.
Μεταγγλωτισμένο σε Assembly.
Αρχεία εισόδου υπάρχουν μέσα στον φάκελο "examples".
MIT © 2020 Thomas Siozos, Georgia Kalitsi