forked from hilsonshrestha/slr-parsing
/
slr.py
78 lines (59 loc) · 978 Bytes
/
slr.py
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
'''
SLR PARSING
'''
from Grammar import Grammar
from Goto import GotoGenerator
from ParsingTable import Table
from LR_Parser import LR_Parser
grammar = """
S' := S
S := A c A
S := B c c B
A := c A
A := a
B := c c B
B := b
"""
input = "a c c a"
grammar = """
S' := S
S := q A B C
A := a | b b D
B := a | E
C := b | E
D := C | E
"""
input = "q a a b"
# grammar = """
# # S' := S
# # S := q A B C
# # A := B b b D
# # B := C | E
# # C := b | E
# # D := C | E
# # """
# grammar = """
# S' := S
# S := L = R
# S := R
# L := * R
# L := id
# R := L
# """
# input = "a a b b a a b b"
# input = "q a b"
def main():
global input, grammar
g = Grammar(grammar)
g.parse()
gotos = GotoGenerator(g)
gotos.generate()
gotos.display()
g.first_follow.display()
parsing_table = Table(g, gotos)
parsing_table.generate()
lr_parser = LR_Parser(g, parsing_table, input)
lr_parser.parse()
# print parsingTable.get("5", "$")
if __name__ == '__main__':
main()