-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathparser1.py
More file actions
113 lines (92 loc) · 3.28 KB
/
parser1.py
File metadata and controls
113 lines (92 loc) · 3.28 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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
import ply.yacc as yacc
from lexer import tokens, lexer
def p_main(p):
'''main : Statements'''
def p_Statements(p):
'''Statements : var_declaration Statements
| assignment Statements
| expression Statements
| initialization Statements
| while_loop Statements
| if_else_statement Statements
| switch_statement Statements
| '''
pass
def p_var_declaration(p):
'''var_declaration : TYPE list_var SEMI_COLON'''
print("Valid declaration.")
pass
def p_list_var(p):
'''list_var : ID
| ID COMMA list_var
| '''
pass
def p_assignment(p):
'''assignment : ID EQUAL expression SEMI_COLON
| ID EQUAL expression COMMA assignment'''
print("Valid assignment.")
pass
def p_initialization(p):
'''initialization : TYPE ID EQUAL expression SEMI_COLON'''
print("Valid initialization.")
pass
def p_condition(p):
'''condition : ID rel ID
| ID rel NUMBER
| NUMBER rel ID
| NUMBER rel NUMBER
| expression rel expression
'''
print("Valid condition.")
pass
def p_rel(p):
'''rel : GOE
| LOE
| GREAT
| LESS
| EQ
| NEQ
'''
pass
def p_expression(p):
'''expression : expression PLUS term
| expression MINUS term
| expression TIMES term
| expression DIVIDE term
| expression MOD term
| term'''
pass
def p_term(p):
'''term : term TIMES factor
| term DIVIDE factor
| term MOD factor
| factor'''
pass
def p_factor(p):
'''factor : NUMBER
| ID
| L_PARENTHESIS expression R_PARENTHESIS'''
pass
def p_if_else(p):
'''if_else_statement : IF L_PARENTHESIS condition R_PARENTHESIS L_CBRACES Statements R_CBRACES ELSE L_CBRACES Statements R_CBRACES
| IF L_PARENTHESIS condition R_PARENTHESIS L_CBRACES Statements R_CBRACES'''
print("Valid if-else statement.")
pass
def p_while_loop(p):
'while_loop : WHILE L_PARENTHESIS condition R_PARENTHESIS L_CBRACES Statements R_CBRACES '
print("Valid while loop.")
def p_switch_statement(p):
'''switch_statement : SWITCH L_PARENTHESIS expression R_PARENTHESIS L_CBRACES case_statements R_CBRACES'''
print("Valid switch statement.")
def p_case_statements(p):
'''case_statements : CASE expression COLON Statements BREAK SEMI_COLON case_statements
| CASE expression COLON Statements BREAK SEMI_COLON
| CASE expression COLON Statements
| CASE expression COLON Statements case_statements
| DEFAULT COLON Statements BREAK SEMI_COLON
| DEFAULT COLON Statements'''
pass
def p_error(p):
print(f"Syntax error at line {p.lineno}, position {p.lexpos}: Unexpected token '{p.value}'")
#quit()
parser = yacc.yacc()