Compare commits

...

2 Commits

7 changed files with 17 additions and 15 deletions

View File

@ -42,7 +42,7 @@ class N(enum.IntEnum):
# Flow control
REPEAT = enum.auto()
WHILE = enum.auto()
UNTIL = enum.auto()
IF = enum.auto()
# Expressions

View File

@ -132,8 +132,8 @@ class Context:
for i in range(count):
self.run(n.args[1])
elif n.type == N.WHILE:
while self.run(n.args[0]):
elif n.type == N.UNTIL:
while not self.run(n.args[0]):
self.run(n.args[1])
elif n.type == N.IF:

View File

@ -33,8 +33,8 @@ class T(enum.IntEnum):
# Flow control
REPEAT = 0xF911
REPEAT_END = 0xF912
WHILE = 0xF913
WHILE_END = 0xF914
UNTIL = 0xF913
UNTIL_END = 0xF914
IF = 0xF915
IF_END = 0xF916
IFELSE = 0xF917
@ -331,7 +331,7 @@ class TextLexer(LexerBase):
RE_STMTS = re.compile(
r"NOP|FORWARD|ROTATE|ORIENT|GOTO|PENDOWN|PENUP|SETVAR|INPUT|MESSAGE|"
r"PRINT|STYLE|WAIT|REPEAT_END|REPEAT|WHILE_END|WHILE|IF_END|ELSE|"
r"PRINT|STYLE|WAIT|REPEAT_END|REPEAT|UNTIL_END|UNTIL|IF_END|ELSE|"
r"IFELSE_END|IFELSE|IF",
re.IGNORECASE)
RE_CONST = re.compile(

View File

@ -20,7 +20,7 @@ class Parser:
PENDOWN | PENUP | SETVAR arg argvar | INPUT argvar |
MESSAGE arg | PRINT arg | STYLE style | WAIT arg |
REPEAT arg program REPEAT_END |
WHILE cond PARAM program WHILE_END |
UNTIL cond PARAM program UNTIL_END |
IF cond PARAM program IF_END |
IFELSE cond PARAM program ELSE program IFELSE_END
arg -> expr PARAM
@ -112,7 +112,7 @@ class Parser:
valid = [
T.FORWARD, T.ROTATE, T.ORIENT, T.GOTO, T.PENDOWN, T.PENUP,
T.SETVAR, T.INPUT, T.MESSAGE, T.PRINT, T.STYLE, T.WAIT,
T.REPEAT, T.WHILE, T.IF, T.IFELSE,
T.REPEAT, T.UNTIL, T.IF, T.IFELSE,
]
op = self.expect(*valid, optional=optional)
@ -155,14 +155,14 @@ class Parser:
self.expect(T.EOL, optional=True)
return Node(N.REPEAT, arg, prg)
if op.type == T.WHILE:
if op.type == T.UNTIL:
cond = self.cond()
self.expect(T.PARAM)
self.expect(T.EOL, optional=True)
prg = self.program()
self.expect(T.WHILE_END)
self.expect(T.UNTIL_END)
self.expect(T.EOL, optional=True)
return Node(N.WHILE, cond, prg)
return Node(N.UNTIL, cond, prg)
if op.type == T.IF:
cond = self.cond()

View File

@ -0,0 +1 @@
http://wes.casio.com/math/index.php?q=I-295A+U-000000000000+M-0E00000000+S-000410110001100E0010B30025E0+E-F9083237003700F901F9053100F901F909F901F9053000F901F90B31004000F901F91340FB053700F901F9054000F901F90832380037A740A86040A631D0A93200F901F90B40A631004000F901F914F901F9053600F901F908323800A7323000F901F9053600F901F90AF901F9083134003000F901F909F901F9083134003100F901F9053500F901F908313900A73500F901F905A73500F901F908313400A73200F901F90AF901F908313600A73100F901F909F901F908313600A73200F901F905A73500F901F9083131003500F901F9053300F901F9083134003700F901F905A73800F901F90836003300F901F9053800F901F9083134003500F901F9053200F901F9083136003100F901F90AF901F908373400A7313400F901F9053100F901F909F901F9053200F901F908373700A7313600F901F905A73200F901F908373500A7313800F901F9053200F901F90AF901F9053200F901F9113200F901F9053100F901F909F901F9053100F901F906393000F901F9053400F901F906393000F901F912F901F90AF901F9053400F901F909F901F9053200F901F905A73100F901F906393000F901F9053400F901F908383300A7313500F901F90AF901F908383600A7313800F901F906A7393000F901F9053100F901F909F901F9053200F901F906393000F901F9053200F901F9113400F901F9053200F901F906393000F901F912F901F90AF901F908383200A7313000F901F9053100F901F909F901F9053300F901F908383400A73400F901F908383500A73400F901F905A73200F901F908383200A73900F901F908373900A73600F901F9053200F901F908383000A73400F901F908383200A73600F901F90AF901F9083800A7313200F901F9073000F901F90B31004700F901F91347FB053900F901F91547A53500F901F9083600A7313200F901F916F901F9053100F901F909F901F9053000F901F906393000F901F9053100F901F906A7393000F901F91547FB023400F901F90AF901F9053100F901F906393000F901F9053100F901F909F901F9053000F901F90AF901F9053100F901F906A7393000F901F9053100F901F909F901F9053000F901F916F901F9053100F901F90AF901F906393000F901F9053100F901F906A7393000F901F9053100F901F909F901F9053300F901F90AF901F9053100F901F906A7393000F901F90B47A631004700F901F914F901F907393000F901F908353500A73500F901F909F901F908353700A73700F901F908353300A7313100F901F905A73200F901F908353700A7313300F901F905A73800F901F908353600A7323200F901F908353500A7323200F901F908353400A7323100F901F9053800F901F908353800A7313300F901F9053200F901F908353700A7313000F901F9053100F901F908353400A73900F901F908353600A73700F901F9053400F901F908353500A73200F901F908353600A73100F901F9053100F901F9083537003100F901F9053300F901F9083534003700F901F9083530003700F901F9083438003500F901F9083437003500F901F9083436003400F901F905A73300F901F9083435003100F901F9083434003000F901F908353200A73800F901F908353400A73800F901F908353100A73800F901F908343900A73600F901F908343700A73600F901F908343600A73500F901F9053100F901F908343700A73400F901F9053300F901F908343900A73300F901F908353400A73300F901F908353300A73400F901F905A73400F901F908353200A73700F901F908353400A73500F901F90AF901F9083438003500F901F905A73100F901F909F901F905A73100F901F906A7393000F901F9053200F901F90AF901F9053200F901F909F901F9053300F901F906393000F901F9053200F901F906393000F901F9053100F901F90AF901F9083535003200F901F909F901F9083533003000F901F9053300F901F9083438003200F901F90AF901F908353000A73100F901F909F901F9083530003100F901F905A73300F901F908353300A73100F901F90AF901F9083436003100F901F909F901F9083437003000F901F90AF901F9083734003200F901F9073000F901F90B30004700F901F91347FB053200F901F9053100F901F909F901F9053000F901F90AF901F9053700F901F91547A53000F901F909F901F9053000F901F916F901F90AF901F9053700F901F909F901F9053000F901F90AF901F908393000A73300F901F90631383000F901F90B47A631004700F901F914F901F9083739003100F901F9113200F901F9113200F901F9053100F901F909F901F9053100F901F90AF901F9053100F901F912F901F908383500A73100F901F90631383000F901F912F901F9083736003000F901F9113200F901F9053100F901F909F901F9053200F901F90AF901F9053500F901F912F901F908373400A73100F901F9113200F901F9053100F901F909F901F9053100F901F90AF901F905313100F901F912F901F908373400A73300F901F9113200F901F907393000F901F9053100F901F909F901F9053300F901F90AF901F908393000A73300F901F912F901F908383200A73300F901F9053100F901F909F901F9053000F901F90AF901F90B3432004200F901F90BA73135004300F901F90B30004400F901F91344FB053300F901F90842A6310043A63100F901F909F901F908420043A63200F901F90AF901F90842A6350043A63100F901F909F901F90842A6360043A63200F901F90AF901F90842A6330043A63200F901F9053100F901F909F901F9053100F901F90AF901F91544A53000F901F90B3631004200F901F90B31004300F901F916F901F91544A53100F901F90B3633004200F901F90BA73232004300F901F916F901F90B44A631004400F901F914F901F903F901F902

View File

@ -0,0 +1 @@
http://wes.casio.com/math/index.php?q=I-295A+U-000000000000+M-0E00000000+S-000410110001100E0010B30025E0+E-F908A7363000323000F901F909F901F9053800F901F906A7393000F901F9053400F901F906A7393000F901F9053900F901F906A7393000F901F9053400F901F903F901F902

View File

@ -1,12 +1,12 @@
setvar 0, A
while A <= 5
until A=6
setvar 0, B
while B <= 12
until B=13
penup
goto 14*B-90, 7*A-20
pendown
goto 15*B-90, 8*A-20
setvar B+1, B
while_end
until_end
setvar A+1, A
while_end
until_end