-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathparser_rules.py
82 lines (63 loc) · 2.14 KB
/
parser_rules.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
79
80
81
82
import ply.yacc as yacc
from tokrules import tokens
from expressions import *
## All the productions of our gramar
def p_value_string(expression):
'''value : STRING'''
expression[0] = String(expression[1])
def p_value_number(expression):
'''value : NUMBER'''
expression[0] = SimpleValue(expression[1])
def p_value_true(expression):
'''value : TRUE'''
expression[0] = SimpleValue(expression[1])
def p_value_false(expression):
'''value : FALSE'''
expression[0] = SimpleValue(expression[1])
def p_value_null(expression):
'''value : NULL'''
expression[0] = SimpleValue('')
def p_value_object(expression):
'''value : object'''
if(expression[1].is_compose_value()):
expression[0] = ComposeValue(expression[1])
else:
expression[0] = expression[1]
def p_value_array(expression):
'''value : array'''
if(expression[1].is_compose_value()):
expression[0] = ComposeValue(expression[1])
else:
expression[0] = expression[1]
def p_object_empty(expression):
'''object : '{' '}' '''
expression[0] = SimpleValue('{}')
def p_object_members(expression):
'''object : '{' members '}' '''
expression[0] = Object(expression[2])
def p_members_pair(expression):
'''members : pair'''
expression[0] = Member(expression[1])
def p_members_pairs(expression):
'''members : pair ',' members'''
expression[0] = Member(expression[1])
expression[0].concat_member(expression[3])
def p_pair(expression):
'''pair : STRING ':' value'''
expression[0] = Pair(String(expression[1]), expression[3])
def p_array_empty(expression):
'''array : '[' ']' '''
expression[0] = SimpleValue('[]')
def p_array_elements(expression):
'''array : '[' elements ']' '''
expression[0] = Array(expression[2])
def p_elements_value(expression):
'''elements : value '''
expression[0] = Element(expression[1])
def p_elements_elements(expression):
'''elements : value ',' elements'''
expression[0] = Element(expression[1])
expression[0].concat_element(expression[3])
def p_error(subexpr):
# In case no production matches
raise Exception("Syntax error.")