-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathinput_grammer.txt
134 lines (134 loc) · 4.34 KB
/
input_grammer.txt
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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
35
program@program
var@var
array@array
of@of
num@[0-9]+(\.[0-9]+((E|e)(\+|\-)?[0-9]+)?)?
integer@integer
real@real
function@function
procedure@procedure
begin@begin
end@end
assignop@:=
if@if
then@then
else@else
while@while
do@do
relop@<|>|=|<>|>=|<=
addop@\+|\-|or
mulop@\*|div|mod|and|/
not@not
dotdot@\.\.
+@\+
-@\-
;@;
.@\.
,@,
:@\:
)@\)
(@\(
[@\[
]@\]
id@[a-zA-Z][A-Za-z0-9]*
Epsilon@
$@$
62
programe := #save program #add_program_st id arguments ; declarations subprogram-declarations #jmp_to_start compound-statement . $
arguments := ( parameter-list )
arguments := Epsilon
parameter-list := #push_start_id_stack identifier-list : type #add_ids_to_st param-gen
param-gen := ; #push_start_id_stack identifier-list : type #add_ids_to_st param-gen
param-gen := Epsilon
identifier-list := #push_id id id-gen
id-gen := , #push_id id id-gen
id-gen := Epsilon
declarations := var #push_start_id_stack identifier-list : type #add_ids_to_st ; dec-gen
declarations := Epsilon
dec-gen := var #push_start_id_stack identifier-list : type #add_ids_to_st ; dec-gen
dec-gen := Epsilon
type := standard-type #push_single
type := array #push_start_dim [ dimension ] of standard-type #push_array
dimension := #push_id num dotdot #push_id num dim-gen
dim-gen := , #push_id num dotdot #push_id num dim-gen
dim-gen := Epsilon
standard-type := #push_id integer
standard-type := #push_id real
subprogram-declarations := subprogram-declaration ; subprogram-declarations
subprogram-declarations := Epsilon
subprogram-declaration := subprogram-head #set_arg_nr declarations compound-statement #add_return_addr_st
subprogram-head := function #add_function_st id arguments : standard-type #add_function_ret_st ;
subprogram-head := procedure #add_proc_st id arguments ;
compound-statement := begin optional-statements end
optional-statements := statement-list
optional-statements := Epsilon
statement-list := statement statement-list-gen
statement-list-gen := ; statement statement-list-gen
statement-list-gen := Epsilon
statement := compound-statement
statement := if expression #save then statement else #jpf_save statement #jp
statement := while #label expression #save do statement #while_filler
statement := #push_intelligent id proc-or-assign
proc-or-assign := array-index assignop expression #assignop
proc-or-assign := call-parameters #assign_jmp
proc-or-assign := Epsilon #assign_jmp
array-index := [ expression #calc_array_pos ]
array-index := Epsilon
call-parameters := ( expression-list )
expression-list := expression expression-list-gen
expression-list-gen := Epsilon
expression-list-gen := , expression expression-list-gen
expression := simple-expression logical-expression
logical-expression := #push_id relop simple-expression #do_logic
logical-expression := Epsilon
simple-expression := term sum-operand
simple-expression := #push_id sign term #set_term_sign sum-operand
sum-operand := #push_id addop term #sum_calc sum-operand
sum-operand := Epsilon
term := factor mulop-operand
mulop-operand := #push_id mulop factor #mul_calc mulop-operand
mulop-operand := Epsilon
factor := #push_id_and_check id #push_start_of_array_or_call call-parameters-2 #call_or_calc_array
call-parameters-2 := ( expression-list )
call-parameters-2 := Epsilon
factor := #push_num num
factor := ( expression )
factor := not factor #do_not
sign := +
sign := -
34
programe -> program
arguments -> argument
declarations -> declaration
subprogram-declarations -> function or procedure declarations
compound-statement -> program body
parameter-list -> argument list
identifier-list -> identifier list
type -> type
param-gen -> parameter
id-gen -> identifier
dec-gen -> declaration
standard-type -> type integer or real
dimension -> array dimension
dim-gen -> array dimension
subprogram-declaration -> function or procedure declaration
subprogram-head -> function or procedure header
optional-statements -> statement
statement-list -> statment list
statement -> statement
statement-list-gen -> statement list
expression -> expression
proc-or-assign -> procedure arguments or assignment
array-index -> array index
call-parameters -> function or procedure call parameters
expression-list -> expression list
expression-list-gen -> expression list
simple-expression -> expression
logical-expression -> relational operation
term -> multiply expression
sum-operand -> sum opeation
sign -> sign
factor -> factor
mulop-operand -> multiply operation
call-parameters-2 -> call paramaters