Skip to content

Commit

Permalink
crossed some items from #6
Browse files Browse the repository at this point in the history
  • Loading branch information
GuidoDipietro committed Oct 3, 2021
1 parent b3a74dd commit 62f9b9b
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 6 deletions.
3 changes: 2 additions & 1 deletion glexer.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

class GeckoLexer(Lexer):
tokens = { ID, PLUS, MINUS, TIMES,
DIV, POW, MATHFUNC, NUMBER,
DIV, POW, MOD, MATHFUNC, NUMBER,
LPAREN, RPAREN, ASSIGN, THEN, WITH, POLAR, AT, DEGSYM,
CALC, EXIT, NEWLINE, TICK, COMMA, PIPE,
SEMI, VARS, NEW,
Expand Down Expand Up @@ -50,6 +50,7 @@ class GeckoLexer(Lexer):
TIMES = r'\*'
DIV = r'/'
POW = r'\^'
MOD = r'%'
LPAREN = r'\('
RPAREN = r'\)'
ASSIGN = r'='
Expand Down
8 changes: 5 additions & 3 deletions gparser.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ class GeckoParser(Parser):
('left', MONO_WITH_EXPR, COMMA),
('right', WITH_ASSIGNS),
('left', PLUS, MINUS),
('left', TIMES, DIV),
('left', TIMES, DIV, MOD),
('right', CONSTANT),
('right', MATHFUNC, UMINUS),
('right', POW),
Expand Down Expand Up @@ -60,7 +60,8 @@ class GeckoParser(Parser):
'-': lambda x,y: x-y,
'*': lambda x,y: x*y,
'/': lambda x,y: x/y,
'^': lambda x,y: x**y
'^': lambda x,y: x**y,
'%': lambda x,y: x%y,
}

def __init__(self):
Expand Down Expand Up @@ -367,7 +368,8 @@ def statement(self, p):
'expr MINUS expr',
'expr TIMES expr',
'expr DIV expr',
'expr POW expr')
'expr POW expr',
'expr MOD expr')
def expr(self, p):
return ('binop',p[1],p.expr0,p.expr1)

Expand Down
3 changes: 2 additions & 1 deletion grammar.txt
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ expr : expr + expr
| expr * expr
| expr / expr
| expr ^ expr
| expr % expr
| - expr %prec UMINUS
| NUMBER
| NUMBER AT expr
Expand Down Expand Up @@ -69,7 +70,7 @@ precedence = (
('left', MONO_WITH_EXPR, COMMA),
('right', WITH_ASSIGNS),
('left', PLUS, MINUS),
('left', TIMES, DIV),
('left', TIMES, DIV, MOD),
('right', CONSTANT),
('right', MATHFUNC, UMINUS),
('right', POW),
Expand Down
9 changes: 8 additions & 1 deletion tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,14 @@
("1j(3j)", -3),
("j(x)=15x; 1j(3j)", 45j),
("j(x)=15x; new; 1j(3j)", -3),
("num1 = j; j = 400; num2 = num1 + j; num2", 400+1j)
("num1 = j; j = 400; num2 = num1 + j; num2", 400+1j),
("4%2", 0),
("1+15%2", 2),
("1+15%2*3", 4),
(r"10 % int 1 from 0 to 3", 1),
(r"1%2%3", 1),
("f(x) = (x%4)^2; f(10)", 4),
("f(x) = x%2; int f(x) from 0 to 6", 5.999999999999999)
]

for (expr, val) in tests:
Expand Down

0 comments on commit 62f9b9b

Please sign in to comment.