-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathGrammer.py
More file actions
88 lines (85 loc) · 2.46 KB
/
Grammer.py
File metadata and controls
88 lines (85 loc) · 2.46 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
'''
CODE' -> CODE
CODE -> VDECL CODE
CODE -> FDECL CODE
CODE -> CDECL CODE
CODE -> ''
VDECL->vtype id semi
VDECL -> vtype ASSIGN semi
ASSIGN -> id assign RHS
RHS -> EXPR
RHS -> literal
RHS -> character
RHS -> boolstr
EXPR -> EXPRT addsub EXPR
EXPR -> EXPRT
EXPRT -> EXPRF multdiv EXPRT
EXPRT -> EXPRF
EXPRF -> lparen EXPR rparen
EXPRF -> id
EXPRF -> num
FDECL -> vtype id lparen ARG rparen lbrace BLOCK RETURN rbrace
ARG -> vtype id MOREARGS
ARG -> ''
MOREARGS -> comma vtype id MOREARGS
MOREARGS -> ''
BLOCK -> STMT BLOCK
BLOCK -> ''
STMT -> VDECL
STMT -> ASSIGN semi
STMT -> if lparen COND rparen lbrace BLOCK rbrace ELSE
STMT -> while lparen COND rparen lbrace BLOCK rbrace ELSE
COND -> CONDL comp COND
COND -> CONDL
CONDL -> boolstr
ELSE -> else lbrace BLOCK rbrace
ELSE -> ''
RETURN -> return RHS semi
CDECL -> class id lbrace ODECL rbrace
ODECL -> VDECL ODECL
ODECL -> FDECL ODECL
ODECL -> ''
'''
GRAMMER = [0] * 40
GRAMMER[0] = ("CODE'", 'CODE')
GRAMMER[1] = ('CODE','VDECL CODE')
GRAMMER[2] = ('CODE','FDECL CODE')
GRAMMER[3] = ('CODE','CDECL CODE')
GRAMMER[4] = ('CODE', '')
GRAMMER[5] = ('VDECL','vtype id semi')
GRAMMER[6] = ('VDECL','vtype ASSIGN semi')
GRAMMER[7] = ('ASSIGN','id assign RHS')
GRAMMER[8] = ('RHS','EXPR')
GRAMMER[9] = ('RHS','literal')
GRAMMER[10] = ('RHS','character')
GRAMMER[11] = ('RHS','boolstr')
GRAMMER[12] = ('EXPR','EXPRT addsub EXPR')
GRAMMER[13] = ('EXPR','EXPRT')
GRAMMER[14] = ('EXPRT','EXPRF multdiv EXPRT')
GRAMMER[15] = ('EXPRT','EXPRF')
GRAMMER[16] = ('EXPRF','lparen EXPR rparen')
GRAMMER[17] = ('EXPRF','id')
GRAMMER[18] = ('EXPRF','num')
GRAMMER[19] = ('FDECL','vtype id lparen ARG rparen lbrace BLOCK RETURN rbrace')
GRAMMER[20] = ('ARG','vtype id MOREARGS')
GRAMMER[21] = ('ARG','')
GRAMMER[22] = ('MOREARGS','comma vtype id MOREARGS')
GRAMMER[23] = ('MOREARGS','')
GRAMMER[24] = ('BLOCK','STMT BLOCK')
GRAMMER[25] = ('BLOCK','')
GRAMMER[26] = ('STMT','VDECL')
GRAMMER[27] = ('STMT','ASSIGN semi')
GRAMMER[28] = ('STMT','if lparen COND rparen lbrace BLOCK rbrace ELSE')
GRAMMER[29] = ('STMT','while lparen COND rparen lbrace BLOCK rbrace ELSE')
GRAMMER[30] = ('COND','CONDL comp COND')
GRAMMER[31] = ('COND','CONDL')
GRAMMER[32] = ('CONDL','boolstr')
GRAMMER[33] = ('ELSE','else lbrace BLOCK rbrace')
GRAMMER[34] = ('ELSE','')
GRAMMER[35] = ('RETURN','return RHS semi')
GRAMMER[36] = ('CDECL','class id lbrace ODECL rbrace')
GRAMMER[37] = ('ODECL','VDECL ODECL')
GRAMMER[38] = ('ODECL','FDECL ODECL')
GRAMMER[39] = ('ODECL','')
def grammer_fn():
return GRAMMER