✨
This commit is contained in:
@ -6,7 +6,8 @@ from rply.token import BaseBox
|
||||
BUILTIN_ARGS = {
|
||||
"print": "*",
|
||||
"input" : "*",
|
||||
"random": 2
|
||||
"random": 2,
|
||||
"len": 1
|
||||
}
|
||||
|
||||
def rep_join(l):
|
||||
@ -70,13 +71,19 @@ class ExpABinop(Exp):
|
||||
if r1.isdigit():
|
||||
r1 = int(r1)
|
||||
else:
|
||||
r1 = float(r1)
|
||||
try:
|
||||
r1 = float(r1)
|
||||
except ValueError:
|
||||
pass
|
||||
vtable, ftable, r2 = self.exp2.eval(vtable, ftable)
|
||||
if isinstance(r2,str):
|
||||
if r2.isdigit():
|
||||
r2 = int(r2)
|
||||
else:
|
||||
r2 = float(r2)
|
||||
try:
|
||||
r2 = float(r2)
|
||||
except ValueError:
|
||||
pass
|
||||
if self.op == "+":
|
||||
return vtable, ftable, r1+r2
|
||||
elif self.op == "-":
|
||||
@ -91,6 +98,8 @@ class ExpABinop(Exp):
|
||||
return vtable, ftable, r1 > r2
|
||||
elif self.op == "<":
|
||||
return vtable, ftable, r1 < r2
|
||||
elif self.op == "mod":
|
||||
return vtable, ftable, r1 % r2
|
||||
else:
|
||||
raise Exception(f"Unknown binop {self.op}")
|
||||
|
||||
@ -149,7 +158,7 @@ class Command(BaseBox):
|
||||
|
||||
class Builtin(Command):
|
||||
def __init__(self, builtin, args: list[Exp]):
|
||||
self.builtin = builtin.value
|
||||
self.builtin = builtin.value[:-1]
|
||||
self.args = args
|
||||
self.position = builtin.source_pos.lineno
|
||||
expected_args = BUILTIN_ARGS[self.builtin]
|
||||
@ -191,6 +200,10 @@ class Builtin(Command):
|
||||
r = random.randint(r1, r2)
|
||||
|
||||
return vtable, ftable, r
|
||||
elif self.builtin == "len":
|
||||
vtable, ftable, result = self.args[0].eval(vtable,ftable)
|
||||
|
||||
return vtable, ftable, len(result)
|
||||
else:
|
||||
raise Exception(f"Unknown builtin {self.builtin}")
|
||||
|
||||
|
Reference in New Issue
Block a user