-
Notifications
You must be signed in to change notification settings - Fork 2
/
pycalc_gram.ll
40 lines (39 loc) · 1.04 KB
/
pycalc_gram.ll
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
#
# Copyright © 2019 Keith Packard <[email protected]>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
#
start : line start
|
;
line : expr @PRINT@ NL
| NL
;
expr : term expr-p
;
expr-p : PLUS term @ADD@ expr-p
| MINUS term @SUBTRACT@ expr-p
|
;
term : fact term-p
;
term-p : TIMES fact @TIMES@ term-p
| DIVIDE fact @DIVIDE@ term-p
|
;
fact : OP expr CP
| MINUS fact @NEGATE@
| NUMBER @PUSH@
;