-
Notifications
You must be signed in to change notification settings - Fork 0
/
semantic.json
108 lines (108 loc) · 1.71 KB
/
semantic.json
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
{
"start_symbol": "P'",
"empty_string": "null",
"terminals": "proc id ; struct int unsigned long char short float double bool { } [ ] = + * - / % ^ ( ) if then else while do or and not true false < <= == != > >= call , $ dec oct hex const_int const_float const_char const_string e-notation",
"non_terminals": "P' P S D X C E L B RelOp ELst Num Op N1 N2 N3 M1",
"rules": {
"P'": [
"P"
],
"P": [
"D P",
"S M1 P",
"null"
],
"S": [
"S M1 S",
"id = E ;",
"L = E ;",
"if B then M1 S",
"if B then M1 S N3 else M1 S",
"while M1 B do { M1 S }",
"call id ( ELst ) ;"
],
"D": [
"D D",
"proc id ; { N1 D S }",
"X id C ;",
"struct id N2 { D } ;"
],
"X": [
"int",
"unsigned",
"long",
"short",
"char",
"double",
"float",
"bool"
],
"C": [
"[ Num ] C",
"null"
],
"Num": [
"dec",
"oct",
"hex",
"const_int",
"const_float",
"e-notation"
],
"E": [
"E Op E",
"- E",
"( E )",
"id",
"L",
"Num",
"const_char",
"const_string"
],
"Op": [
"+",
"-",
"*",
"/",
"%",
"^"
],
"L": [
"id [ E ]",
"L [ E ]"
],
"B": [
"B or M1 B",
"B and M1 B",
"not B",
"( B )",
"E RelOp E",
"true",
"false"
],
"RelOp": [
"<",
"<=",
"==",
"!=",
">",
">="
],
"ELst": [
"ELst , E",
"E"
],
"N1": [
"null"
],
"N2": [
"null"
],
"N3": [
"null"
],
"M1": [
"null"
]
}
}