Compiler Design course project
the grammer of the language our compiler supports is:
Program -> Declaration-list eof
Declaration-list -> Declaration Declaration-list
Declaration-list -> Ξ΅
Declaration -> Declaration-initial Declaration-prime
Declaration-initial -> Type-specifier id
Declaration-prime -> Fun-declaration-prime
Declaration-prime -> Var-declaration-prime
Var-declaration-prime -> ;
Var-declaration-prime -> [ num ] ;
Fun-declaration-prime -> ( Params ) Compound-stmt
Type-specifier -> int
Type-specifier -> void
Params -> int id Param-Prime Param-list
Params -> void Param-list-void-abtar
Param-list-void-abtar -> id Param-prime Param-list
Param-list-void-abtar -> Ξ΅
Param-list -> , Param Param-list
Param-list -> Ξ΅
Param -> Declaration-initial Param-prime
Param-prime -> Ξ΅
Param-prime -> [ ]
Compound-stmt -> { Declaration-list Statement-list }
Statement-list -> Statement Statement-list
Statement-list -> Ξ΅
Statement -> Expression-stmt
Statement -> Compound-stmt
Statement -> Selection-stmt
Statement -> Iteration-stmt
Statement -> Return-stmt
Statement -> Switch-stmt
Expression-stmt -> Expression ;
Expression-stmt -> continue ;
Expression-stmt -> break ;
Expression-stmt -> ;
Selection-stmt -> if ( Expression ) Statement else Statement
Iteration-stmt -> while ( Expression ) Statement
Return-stmt -> return Return-stmt-prime
Return-stmt-prime -> ;
Return-stmt-prime -> Expression ;
Switch-stmt -> switch ( Expression ) { Case-stmts Default-stmt }
Case-stmts -> Case-stmt Case-stmts
Case-stmts -> Ξ΅
Case-stmt -> case num : Statement-list
Default-stmt -> default : Statement-list
Default-stmt -> Ξ΅
Expression -> id B
Expression -> Simple-expression-zegond
B -> = Expression
B -> [ Expression ] H
B -> Simple-expression-prime
H -> = Expression
H -> G D C
Simple-expression-zegond -> Additive-expression-zegond C
Simple-expression-prime -> Additive-expression-prime C
C -> Relop Additive-expression
C -> Ξ΅
Relop -> ==
Relop -> <
Addop -> +
Addop -> -
Additive-expression -> Term D
Additive-expression-prime -> Term-prime D
Additive-expression-zegond -> Term-zegond D
D -> Addop Term D
D -> Ξ΅
Term -> Signed-factor G
Term-prime -> Signed-factor-prime G
Term-zegond -> Signed-factor-zegond G
G -> * Signed-factor G
G -> Ξ΅
Signed-factor -> + Factor
Signed-factor -> - Factor
Signed-factor -> Factor
Signed-factor-prime -> Factor-prime
Signed-factor-zegond -> + Factor
Signed-factor-zegond -> - Factor
Signed-factor-zegond -> Factor-zegond
Factor -> ( Expression )
Factor -> num
Factor -> id Var-call-prime
Var-call-prime -> Var-prime
Var-call-prime -> ( Args )
Var-prime -> [ Expression ]
Var-prime -> Ξ΅
Factor-prime -> ( Args )
Factor-prime -> Ξ΅
Factor-zegond -> ( Expression )
Factor-zegond -> num
Args -> Arg-list
Args -> Ξ΅
Arg-list -> Expression Arg-list-prime
Arg-list-prime -> , Expression Arg-list-prime
Arg-list-prime -> Ξ΅
void main(void) {
int i;
i = 1;
while (i < 10) {
if (i == 5) {
break;
} else {
output(i);
i = i + 1;
continue;
}
}
i = 13234123;
output(i);
}Program
βββ Declaration-list
β βββ Declaration
β β βββ Declaration-initial
β β β βββ Type-specifier
β β β β βββ (KEYWORD, void)
β β β βββ (ID, main)
β β βββ Declaration-prime
β β βββ Fun-declaration-prime
β β βββ (SYMBOL, ()
β β βββ Params
β β β βββ (KEYWORD, void)
β β β βββ Param-list-void-abtar
β β β βββ epsilon
β β βββ (SYMBOL, ))
β β βββ Compound-stmt
β β βββ (SYMBOL, {)
β β βββ Declaration-list
β β β βββ Declaration
β β β β βββ Declaration-initial
β β β β β βββ Type-specifier
β β β β β β βββ (KEYWORD, int)
β β β β β βββ (ID, i)
β β β β βββ Declaration-prime
β β β β βββ Var-declaration-prime
β β β β βββ (SYMBOL, ;)
β β β βββ Declaration-list
β β β βββ epsilon
β β βββ Statement-list
β β β βββ Statement
β β β β βββ Expression-stmt
β β β β βββ Expression
β β β β β βββ (ID, i)
β β β β β βββ B
β β β β β βββ (SYMBOL, =)
β β β β β βββ Expression
β β β β β βββ Simple-expression-zegond
β β β β β βββ Additive-expression-zegond
β β β β β β βββ Term-zegond
β β β β β β β βββ Signed-factor-zegond
β β β β β β β β βββ Factor-zegond
β β β β β β β β βββ (NUM, 1)
β β β β β β β βββ G
β β β β β β β βββ epsilon
β β β β β β βββ D
β β β β β β βββ epsilon
β β β β β βββ C
β β β β β βββ epsilon
β β β β βββ (SYMBOL, ;)
β β β βββ Statement-list
β β β βββ Statement
β β β β βββ Iteration-stmt
β β β β βββ (KEYWORD, while)
β β β β βββ (SYMBOL, ()
β β β β βββ Expression
β β β β β βββ (ID, i)
β β β β β βββ B
β β β β β βββ Simple-expression-prime
β β β β β βββ Additive-expression-prime
β β β β β β βββ Term-prime
β β β β β β β βββ Signed-factor-prime
β β β β β β β β βββ Factor-prime
β β β β β β β β βββ epsilon
β β β β β β β βββ G
β β β β β β β βββ epsilon
β β β β β β βββ D
β β β β β β βββ epsilon
β β β β β βββ C
β β β β β βββ Relop
β β β β β β βββ (SYMBOL, <)
β β β β β βββ Additive-expression
β β β β β βββ Term
β β β β β β βββ Signed-factor
β β β β β β β βββ Factor
β β β β β β β βββ (NUM, 10)
β β β β β β βββ G
β β β β β β βββ epsilon
β β β β β βββ D
β β β β β βββ epsilon
β β β β βββ (SYMBOL, ))
β β β β βββ Statement
β β β β βββ Compound-stmt
β β β β βββ (SYMBOL, {)
β β β β βββ Declaration-list
β β β β β βββ epsilon
β β β β βββ Statement-list
β β β β β βββ Statement
β β β β β β βββ Selection-stmt
β β β β β β βββ (KEYWORD, if)
β β β β β β βββ (SYMBOL, ()
β β β β β β βββ Expression
β β β β β β β βββ (ID, i)
β β β β β β β βββ B
β β β β β β β βββ Simple-expression-prime
β β β β β β β βββ Additive-expression-prime
β β β β β β β β βββ Term-prime
β β β β β β β β β βββ Signed-factor-prime
β β β β β β β β β β βββ Factor-prime
β β β β β β β β β β βββ epsilon
β β β β β β β β β βββ G
β β β β β β β β β βββ epsilon
β β β β β β β β βββ D
β β β β β β β β βββ epsilon
β β β β β β β βββ C
β β β β β β β βββ Relop
β β β β β β β β βββ (SYMBOL, ==)
β β β β β β β βββ Additive-expression
β β β β β β β βββ Term
β β β β β β β β βββ Signed-factor
β β β β β β β β β βββ Factor
β β β β β β β β β βββ (NUM, 5)
β β β β β β β β βββ G
β β β β β β β β βββ epsilon
β β β β β β β βββ D
β β β β β β β βββ epsilon
β β β β β β βββ (SYMBOL, ))
β β β β β β βββ Statement
β β β β β β β βββ Compound-stmt
β β β β β β β βββ (SYMBOL, {)
β β β β β β β βββ Declaration-list
β β β β β β β β βββ epsilon
β β β β β β β βββ Statement-list
β β β β β β β β βββ Statement
β β β β β β β β β βββ Expression-stmt
β β β β β β β β β βββ (KEYWORD, break)
β β β β β β β β β βββ (SYMBOL, ;)
β β β β β β β β βββ Statement-list
β β β β β β β β βββ epsilon
β β β β β β β βββ (SYMBOL, })
β β β β β β βββ (KEYWORD, else)
β β β β β β βββ Statement
β β β β β β βββ Compound-stmt
β β β β β β βββ (SYMBOL, {)
β β β β β β βββ Declaration-list
β β β β β β β βββ epsilon
β β β β β β βββ Statement-list
β β β β β β β βββ Statement
β β β β β β β β βββ Expression-stmt
β β β β β β β β βββ Expression
β β β β β β β β β βββ (ID, output)
β β β β β β β β β βββ B
β β β β β β β β β βββ Simple-expression-prime
β β β β β β β β β βββ Additive-expression-prime
β β β β β β β β β β βββ Term-prime
β β β β β β β β β β β βββ Signed-factor-prime
β β β β β β β β β β β β βββ Factor-prime
β β β β β β β β β β β β βββ (SYMBOL, ()
β β β β β β β β β β β β βββ Args
β β β β β β β β β β β β β βββ Arg-list
β β β β β β β β β β β β β βββ Expression
β β β β β β β β β β β β β β βββ (ID, i)
β β β β β β β β β β β β β β βββ B
β β β β β β β β β β β β β β βββ Simple-expression-prime
β β β β β β β β β β β β β β βββ Additive-expression-prime
β β β β β β β β β β β β β β β βββ Term-prime
β β β β β β β β β β β β β β β β βββ Signed-factor-prime
β β β β β β β β β β β β β β β β β βββ Factor-prime
β β β β β β β β β β β β β β β β β βββ epsilon
β β β β β β β β β β β β β β β β βββ G
β β β β β β β β β β β β β β β β βββ epsilon
β β β β β β β β β β β β β β β βββ D
β β β β β β β β β β β β β β β βββ epsilon
β β β β β β β β β β β β β β βββ C
β β β β β β β β β β β β β β βββ epsilon
β β β β β β β β β β β β β βββ Arg-list-prime
β β β β β β β β β β β β β βββ epsilon
β β β β β β β β β β β β βββ (SYMBOL, ))
β β β β β β β β β β β βββ G
β β β β β β β β β β β βββ epsilon
β β β β β β β β β β βββ D
β β β β β β β β β β βββ epsilon
β β β β β β β β β βββ C
β β β β β β β β β βββ epsilon
β β β β β β β β βββ (SYMBOL, ;)
β β β β β β β βββ Statement-list
β β β β β β β βββ Statement
β β β β β β β β βββ Expression-stmt
β β β β β β β β βββ Expression
β β β β β β β β β βββ (ID, i)
β β β β β β β β β βββ B
β β β β β β β β β βββ (SYMBOL, =)
β β β β β β β β β βββ Expression
β β β β β β β β β βββ (ID, i)
β β β β β β β β β βββ B
β β β β β β β β β βββ Simple-expression-prime
β β β β β β β β β βββ Additive-expression-prime
β β β β β β β β β β βββ Term-prime
β β β β β β β β β β β βββ Signed-factor-prime
β β β β β β β β β β β β βββ Factor-prime
β β β β β β β β β β β β βββ epsilon
β β β β β β β β β β β βββ G
β β β β β β β β β β β βββ epsilon
β β β β β β β β β β βββ D
β β β β β β β β β β βββ Addop
β β β β β β β β β β β βββ (SYMBOL, +)
β β β β β β β β β β βββ Term
β β β β β β β β β β β βββ Signed-factor
β β β β β β β β β β β β βββ Factor
β β β β β β β β β β β β βββ (NUM, 1)
β β β β β β β β β β β βββ G
β β β β β β β β β β β βββ epsilon
β β β β β β β β β β βββ D
β β β β β β β β β β βββ epsilon
β β β β β β β β β βββ C
β β β β β β β β β βββ epsilon
β β β β β β β β βββ (SYMBOL, ;)
β β β β β β β βββ Statement-list
β β β β β β β βββ Statement
β β β β β β β β βββ Expression-stmt
β β β β β β β β βββ (KEYWORD, continue)
β β β β β β β β βββ (SYMBOL, ;)
β β β β β β β βββ Statement-list
β β β β β β β βββ epsilon
β β β β β β βββ (SYMBOL, })
β β β β β βββ Statement-list
β β β β β βββ epsilon
β β β β βββ (SYMBOL, })
β β β βββ Statement-list
β β β βββ Statement
β β β β βββ Expression-stmt
β β β β βββ Expression
β β β β β βββ (ID, i)
β β β β β βββ B
β β β β β βββ (SYMBOL, =)
β β β β β βββ Expression
β β β β β βββ Simple-expression-zegond
β β β β β βββ Additive-expression-zegond
β β β β β β βββ Term-zegond
β β β β β β β βββ Signed-factor-zegond
β β β β β β β β βββ Factor-zegond
β β β β β β β β βββ (NUM, 13234123)
β β β β β β β βββ G
β β β β β β β βββ epsilon
β β β β β β βββ D
β β β β β β βββ epsilon
β β β β β βββ C
β β β β β βββ epsilon
β β β β βββ (SYMBOL, ;)
β β β βββ Statement-list
β β β βββ Statement
β β β β βββ Expression-stmt
β β β β βββ Expression
β β β β β βββ (ID, output)
β β β β β βββ B
β β β β β βββ Simple-expression-prime
β β β β β βββ Additive-expression-prime
β β β β β β βββ Term-prime
β β β β β β β βββ Signed-factor-prime
β β β β β β β β βββ Factor-prime
β β β β β β β β βββ (SYMBOL, ()
β β β β β β β β βββ Args
β β β β β β β β β βββ Arg-list
β β β β β β β β β βββ Expression
β β β β β β β β β β βββ (ID, i)
β β β β β β β β β β βββ B
β β β β β β β β β β βββ Simple-expression-prime
β β β β β β β β β β βββ Additive-expression-prime
β β β β β β β β β β β βββ Term-prime
β β β β β β β β β β β β βββ Signed-factor-prime
β β β β β β β β β β β β β βββ Factor-prime
β β β β β β β β β β β β β βββ epsilon
β β β β β β β β β β β β βββ G
β β β β β β β β β β β β βββ epsilon
β β β β β β β β β β β βββ D
β β β β β β β β β β β βββ epsilon
β β β β β β β β β β βββ C
β β β β β β β β β β βββ epsilon
β β β β β β β β β βββ Arg-list-prime
β β β β β β β β β βββ epsilon
β β β β β β β β βββ (SYMBOL, ))
β β β β β β β βββ G
β β β β β β β βββ epsilon
β β β β β β βββ D
β β β β β β βββ epsilon
β β β β β βββ C
β β β β β βββ epsilon
β β β β βββ (SYMBOL, ;)
β β β βββ Statement-list
β β β βββ epsilon
β β βββ (SYMBOL, })
β βββ Declaration-list
β βββ epsilon
βββ EOF
0 (ASSIGN, #77, 1508)
1 (ASSIGN, #0, 1504)
2 (ASSIGN, #2000, 1500)
3 (ASSIGN, 1500, 500)
4 (ADD, 500, #-1992, 500)
5 (ASSIGN, #1, 504)
6 (ASSIGN, 504, @500)
7 (ASSIGN, #60, 500)
8 (ASSIGN, 1500, 504)
9 (ADD, 504, #-1992, 504)
10 (ASSIGN, #10, 508)
11 (LT, @504, 508, 512)
12 (JPF, 512, 60)
13 (ASSIGN, 1500, 504)
14 (ADD, 504, #-1992, 504)
15 (ASSIGN, #5, 508)
16 (EQ, @504, 508, 516)
17 (JPF, 516, 20)
18 (JP, @500)
19 (JP, 59)
20 (ASSIGN, 1500, 504)
21 (SUB, 504, #1000, 504)
22 (ASSIGN, 500, @504)
23 (ASSIGN, 1500, 504)
24 (SUB, 504, #1004, 504)
25 (ASSIGN, 512, @504)
26 (ASSIGN, 1500, 504)
27 (SUB, 504, #1008, 504)
28 (ASSIGN, 516, @504)
29 (ASSIGN, 1500, 504)
30 (ADD, 504, #-1992, 504)
31 (ASSIGN, 1500, 508)
32 (ASSIGN, @504, @508)
33 (ADD, 1500, #2000, 1500)
34 (ASSIGN, 1500, 504)
35 (ADD, 504, #-1996, 504)
36 (ASSIGN, #38, @504)
37 (ASSIGN, 1500, 504)
38 (ADD, 504, #-2000, 504)
39 (PRINT, @504)
40 (ASSIGN, 1504, 504)
41 (SUB, 1500, #2000, 1500)
42 (ASSIGN, 1500, 508)
43 (SUB, 508, #1000, 508)
44 (ASSIGN, @508, 500)
45 (ASSIGN, 1500, 508)
46 (SUB, 508, #1004, 508)
47 (ASSIGN, @508, 512)
48 (ASSIGN, 1500, 508)
49 (SUB, 508, #1008, 508)
50 (ASSIGN, @508, 516)
51 (ASSIGN, 1500, 504)
52 (ADD, 504, #-1992, 504)
53 (ASSIGN, 1500, 508)
54 (ADD, 508, #-1992, 508)
55 (ASSIGN, #1, 520)
56 (ADD, @508, 520, 524)
57 (ASSIGN, 524, @504)
58 (JP, 8)
59 (JP, 8)
60 (ASSIGN, 1500, 500)
61 (ADD, 500, #-1992, 500)
62 (ASSIGN, #13234123, 504)
63 (ASSIGN, 504, @500)
64 (ASSIGN, 1500, 500)
65 (ADD, 500, #-1992, 500)
66 (ASSIGN, 1500, 504)
67 (ASSIGN, @500, @504)
68 (ADD, 1500, #2000, 1500)
69 (ASSIGN, 1500, 500)
70 (ADD, 500, #-1996, 500)
71 (ASSIGN, #73, @500)
72 (ASSIGN, 1500, 500)
73 (ADD, 500, #-2000, 500)
74 (PRINT, @500)
75 (ASSIGN, 1504, 500)
76 (SUB, 1500, #2000, 1500)
77 (ADD, 1500, 1500, 1500)
PRINT 1
PRINT 2
PRINT 3
PRINT 4
PRINT 13234123