Brief introduction
In this project we implemented a compiler for a new grammar. CUP and LLVM are the tools that we used for implementation. Tests were also designed with JUnit. This project had three main phases. The first phase was implementing a lexical analyser for the given grammar. After that we implemented the parser using CUPS in java. The last phase was implementing the code generator which was done in LLVM.
Compiler Grammar
β©πππππππβͺ β {β©π£ππ_πππβͺβ | β©ππ’ππ_ππ₯π‘πππβͺβ |β©π π‘ππ’ππ‘_πππβͺβ } +
β©ππ’ππ_ππ₯π‘πππβͺ β β©ππ’ππ_πππβͺ | β©ππ₯π‘πππ_πππβͺ
β©ππ’ππ_πππβͺ β β©π‘π¦ππβͺππ
([β©ππππ’ππππ‘π βͺ]) ; | β©π‘π¦ππβͺππ
(β©ππππ’ππππ‘π βͺ]) β©πππππβͺ
β©ππ₯π‘πππ_πππβͺ β ππππππβ©π‘π¦ππβͺππ
;
β©ππππ’ππππ‘π βͺ β β©π‘π¦ππβͺ ππ
[{ β²[β² β²]β² } + ] [, β©ππππ’ππππ‘π βͺ]
β©π‘π¦ππβͺ β πππ | ππππ | πππππ | ππππ | ππππ | π
πππππ | ππ
| ππππππ | ππππ
| ππππβ©π π‘ππ’ππ‘_πππβͺ β ππππππ
ππ
πππππβ©π£ππ_πππβͺ + πππ
ππππππ
;
β©π£ππ_πππβͺ β [πππππ] β©π‘π¦ππβͺβ©π£ππ_πππ_πππ‘βͺ [,β©π£ππ_πππ_πππ‘βͺ] β ;
β©π£ππ_πππ_πππ‘βͺ β β©π£πππππππβͺ [= {β©ππ₯ππβͺ}]
β©πππππβͺ β β²πππππβ² { β©π£ππ_πππβͺ | β©π π‘ππ‘πππππ‘βͺ } β β²πππ
β²
β©π π‘ππ‘πππππ‘βͺ β β©ππ π πππππππ‘βͺ | β©πππ‘βππ_ππππβͺ ; | β©ππππ_π π‘ππ‘βͺ | β©ππππ_π π‘ππ‘βͺ | ππππππ [β©ππ₯ππβͺ]; | πππππ ; | ππππππππ ; | ππππππ(β©π‘π¦ππβͺ)
β©ππ π πππππππ‘βͺ β β©π£πππππππβͺ = β©ππ₯ππβͺ
β©πππ‘βππ_ππππβͺ β ππ
([β©πππππππ‘πππ βͺ])
β©πππππππ‘πππ βͺ β β©ππ₯ππβͺ | β©ππ₯ππβͺ, β©πππππππ‘πππ βͺ
β©ππππ_π π‘ππ‘βͺ β ππ (β©ππ₯ππβͺβ©πππππβͺ [ππππβ©πππππβͺ] | ππππππ (ππ
) ππβΆβ²{β² [{ππππ πππ_πππππβΆβ©πππππβͺ} β] βπ
ππππππ: β©πππππβͺ β²}β²
β©ππππ_π π‘ππ‘βͺ β πππ ([β©π£ππ_πππβͺ] ; β©ππ₯ππβͺ ; [β©ππ π πππππππ‘βͺ | β©ππ₯ππβͺ]) β©πππππβͺ | ππππππβ©πππππβͺπππππ (β©ππ₯ππβͺ); | πππππππ(ππ
ππππ
) β©πππππβͺ
β©ππ₯ππβͺ β β©ππ₯ππβͺ β©ππππππ¦_ππβͺβ©ππ₯ππβͺ | (β©ππ₯ππβͺ) | β©πππ‘βππ_ππππβͺ | β©π£πππππππβͺ | β©ππππ π‘_π£ππβͺ | β β©ππ₯ππβͺ | ! β©ππ₯ππβͺ
β©π£πππππππβͺ β ππ
[{ β²[β² β©ππ₯ππβͺ β²]β² } +] | ~β©π£πππππππβͺ | β ββ©π£πππππππβͺ | + +β©π£πππππππβͺ | β©π£πππππππβͺ β β | β©π£πππππππβͺ + +
β©ππππππ¦_ππβͺ β β©ππππ‘βπππ‘ππβͺ | β©ππππππ‘πππππβͺ
β©ππππ‘βπππ‘ππβͺ β + | β | β | / | % | & | β²|β² | ^ |
β©ππππππ‘πππππβͺ β == | ! = | >= | <=| < | > | and | or | not
β©ππππ π‘_π£ππβͺ β πππ_πππππ | ππππ_πππππ | ππππ_πππππ | ππππ_πππππ | ππππππ_πππππ | ππππ_ππππt