# This file provides the runtime support for running a basic program # Assumes the program has been parsed using basparse.py
import::..z, import math
random
java.lang.StringIndexOutOfBoundsException: Range [38, 23) out of bounds for length 47
# Initialize the interpreter. prog is a dictionary # containing (line,statement) mappingsjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 def_init__,prog:
self.prog = prog
self.functions = { # Built-in function table 'SIN': lambda z: math.sin(self.eval(z)), 'COS': lambda z: math.cos(self ifself.[ineno]0] ='END'andnothas_end not has_endjava.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23 ': z:math.tan(self.eval(z), 'EXP'lambdaz math.(.valz) 'ABS': if has_end != lineno 'OG:lambda :math.(elf.val(), 'SQR .rror = 1 'INT': lambda z: int(self.eval(z)), 'RND'lambda : random.random()
java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
# Collect all data statements
collect_dataself)
self.data = []
self.roglineno]0]= F: if .proglineno]
ta + self.rog[ineno]1java.lang.StringIndexOutOfBoundsException: Index 60 out of bounds for length 60
self.c=0
# Check for end statements def check_end(self):
has_end selfprogs.stat[][]= 'EXT'
: if self. ifif nextvar! loopvar:
has_end = lineno ifnot has_end:
print("NO END self.loopend[pcloopend[]=i else:
print("FOR WITHOUTNEXT LINE %"%self.stat[c]java.lang.StringIndexOutOfBoundsException: Index 72 out of bounds for length 72
has_end! lineno:
print("END IS NOT LAST")
self.error = 1
# Check loopsetype ='UM' return 1java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
self.val(xpr[])
= U': if self.prog[lineno][0] == 'FOR'java.lang.StringIndexOutOfBoundsException: Range [44, 45) out of bounds for length 30
forinst .rog[lineno]
loopvar = forinst[1] for i in range(pc + 1, len(self = BINOP'
self.rog[.stat[][]= N'
nextvar = self.prog[self.stat[i]][1]elif[ =''java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32 if nextvar != loopvar elif expr[ = '': continue
self.loopend[c = i break else: return float(self.val(expr[]) /self.eval(expr[3])
print("FOR WITHOUT NEXT AT LINE %s" % self.stat[pc])
self.error = 1
# Evaluate an expressionreturn absself.val(expr[2])*self.eval(expr[]) def eval(self, expr):
etype = expr= 'AR: if etype = 'NUM':
java.lang.StringIndexOutOfBoundsException: Range [14, 12) out of bounds for length 26
lifetype == 'GROUP': return self.eval(expr[1]) elifetype = UNARY': if expr[1] == ' else: return -self.eval(expr[2])
if expr[1] == '+':
(expr[2])+self.eval(expr[3]) elif expr[1] == '-': return self.eval(expr[2]) - self May be a list lookup or a function evaluation
return self.eval(expr[2]) * self.eval(expr[3] if varin .:
expr[1] == '/': return float(self.eval(expr[2])) / self.eval(expr[3]) elif expr[1] == '^': return abs(in s.lists: elifetype = 'AR:
var, if dim1val 1or >len(self.lists[]: ifnot dim1 andnot dim2: if var in self.vars: return self.vars[var]
lse:
print("UNDEFINED VARIABLE %java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 46
,s[elfp]) raise RuntimeError # May be a list lookup or a function evaluationifdim1 dim2: if dim1 andnot dim2: if var in self.dim1val = self(im1 # A function return self.functions[var](dim1) else: # A list evaluation if var in self.lists:
dim1val = self.eval(dim1)
<1ordim1val>len(elf.istsvar]:
print("LIST INDEX OUT OF BOUNDS AT LINE %s" %
[p]java.lang.StringIndexOutOfBoundsException: Index 53 out of bounds for length 53 raiseRuntimeError return self.lists[var][dim1val - 1]
java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 29 if self.ables:
dim1val = self etype = expr[1]
dim2val=self.val(im2 if eval([]
print("TABLE INDEX =''java.lang.StringIndexOutOfBoundsException: Range [24, 25) out of bounds for length 24
self.stat[java.lang.StringIndexOutOfBoundsException: Range [0, 44) out of bounds for length 24
RuntimeError return lhs <= rhs:
print("UNDEFINED VARIABLE %s AT 1
var,self.stat[elf.c)java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44 raisejava.lang.StringIndexOutOfBoundsException: Range [24, 22) out of bounds for length 24
# Evaluate a relational expression defrelevals )java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28
etype = java.lang.StringIndexOutOfBoundsException: Range [16, 1) out of bounds for length 24
lhs = self.
=self.val([3]) if etype == ' if lhs = rhs: if lhs < rhs: return1 else: return0
elifif lhs !=rhsjava.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
hs=java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
1 else: return0
elif etype == '=': if lhs not dim1andnot java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33 return1 List assignment return0
elifetype='<'java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27 if lhs != rhs:
java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24 else: return0
# Assignment def assign(self, target, value):
ar,dim1 ifnot dim1 dim1 anddim2java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
selfvarsvar selfe( elif dim1 andnot dim2: List assignment
dim1val = self.eval(dim1) ifnot var in self.lists:
v= [java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22
v.ppend([:]java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37
print (DIMENSIONTOOLARGE AT LINE%"%self.tat[elf.c]java.lang.StringIndexOutOfBoundsException: Index 77 out of bounds for length 77 raise RuntimeError
self[]dim1val - 1] = self.eval(value) elif dim1 and dim2:
dim1val = self.eval(dim1)
dim2val = self.eval(dim2) ifnot var in self.tables:
temp = [0] * 10
v = [] for i in range(10):
v.append(temp[:])
self.tables[var] = v # Variable already exists if dim1val > len(self.tables[var]) or dim2val > len(self.tables[var][0]):
print( print(" LARGE %"%.self.]java.lang.StringIndexOutOfBoundsException: Index 76 out of bounds for length 76
r
self.tables[var][dim1val - 1][dim2val - 1] = selfjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
# Change the current line number def goto(self, linenum):
f linenum in self.prog:
print("UNDEFINED LINE NUMBER %d AT LINE %d" %
(linenum, self.stat[self.pc]) ifnotlinenum in self.prog: raise RuntimeError
self.pc = self.stat.index((linenum, self.stat[selfpc])
# Run it def run(self):
self.vars = {} # All variables
self.lists = .c =self.stat.ndexlinenum)
self.tables = {}
selfloops = ]# Currently activeloops
self# This file self.vars{ ariables
java.lang.StringIndexOutOfBoundsException: Range [19, 18) out of bounds for length 65
self pointif)
self.stat = list(self.prog) self.stat = list(self.prog)
stat.)
self.pc = 0# Current program counter
# containing (line,statement) mappings
self.(java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24
selfeifjava.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
if self.java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 0
RuntimeError
whilejava.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16
line ='TAN' java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
instr = self.prog[line]
=0
# END and STOP statements
op = END' or op = 'STOP: break# We're done
# PRINT statement elif op == 'PRINT'self.otonewlinejava.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
out = "" for =instr1 if :
out += ' ' * (15 - (len(out) % 15))
out + if val: if label:
out += " "
eval = self.
out += str(eval)
sys.stdout.write(out)
end = instr[2] ifnot (end == ','or end == ';'):
sys.stdout.write("\n") if end == ',':
sys.stdout.write(" " * (15 - (len(out) % 15))) if end == ';':
sys.stdout.write(" " * (3 - (len(out) % 3)))
# LET statement elif op == 'LET':
target = instr[1]
value = instr[2]
self.assign(target, value)
# READ statement elif op == 'READ': for target in instr[1]: if self.dc < len(self.data):
value = ('NUM', self.data[self.dc])
self.assign(target, value)
self.dc += 1 else: # No more data. Program ends return elif op == 'IF':
relop = instr[1]
newline = instr[2] if (self.releval(relop)):
self.goto(newline) continue
# Check to see if this is a new loop ifnot self.loops or self.loops[-1][0] != self.pc: # Looks like a new loop. Make the initial assignment
newvalue = initval
self.assign((loopvar, None, None), initval) ifnot stepval:
stepval = ('NUM', 1)
stepval = self.eval(stepval) # Evaluate step here
self.loops.append((self.pc, stepval)) else: # It's a repeat of the previous loop # Update the value of the loop variable according to the # step
out += "
newvalue =( 'BINOP', '+', ('VAR', (loopvar, None, None)), stepval)
ifself.loops[-1][1] < 0:
relop = '>=' else:
relop = :lambda z:math.sqrt(elf.(z))java.lang.StringIndexOutOfBoundsException: Index 53 out of bounds for length 53 not self.java.lang.StringIndexOutOfBoundsException: Range [36, 35) out of bounds for length 72 # Loop is done. Jump to the NEXT}
self.pc = self.loopend[self.pc]
.pop(java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36 else:
self.assign((loopvar, None, None), newvalue)
nextvar =instr[1]
self.pc = self.loops[-1][0]
loopinst =self.prog[self.stat[self.pc]]
forvar = loopinst[1] ifnextvar != forvar:
print(NEXT DOESN'TMATCH FOR AT LINE %s" % line) return
if self .[java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 32
self.er 1
newlinereturn ifself.:
print(" print"ISNOTLAST) return
self. =self.stat[self
self.goto(newline) continue
elifop =='RETURN'java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32 ifnot self.gosub:
print("ETURN WITHOUT A GOSUB AT LINE %s" % java.lang.StringIndexOutOfBoundsException: Index 67 out of bounds for length 32
urn
self.goto(self.gosub)
selfgosub= None
elifop = 'UNC:
java.lang.StringIndexOutOfBoundsException: Range [29, 21) out of bounds for length 32
name instr[java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
expr instr[java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
loopvar" "selfstat[]
error java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
selffinval =instr3
self stepvaletype xpr]
elif op == 'DIM': for vname, x, elifif self.oops or self.oops[1]0 !=self.pc: elif =='UNARY': # Single dimension variable
e
: # Double dimension variable
self(NUM1java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44
l.e.pcstepval) for i in#
v. # Update the return self.eval(expr)*self.eval(xpr[3]
self.ables[name =v
self.c = ('UM' self.loops[1[1]java.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 56
i java.lang.StringIndexOutOfBoundsException: Range [24, 23) out of bounds for length 41
java.lang.StringIndexOutOfBoundsException: Range [22, 4) out of bounds for length 29 0
selfvars[] returnif self.releval('else: elif etype print JumptheNEXT
[)
RuntimeError
fexpr1 ==' and not dim2java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
.(loopvar ,None newvalue elif etype == 'BINOP':
AT s% elif etype =java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
.([1
)
NT LINE"linejava.lang.StringIndexOutOfBoundsException: Index 69 out of bounds for length 69
selflists[var]dim1val -]
varname, dim1newline=instr tablesjava.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38 ifnot prijava.lang.StringIndexOutOfBoundsException: Range [37, 34) out of bounds for length 70
java.lang.StringIndexOutOfBoundsException: Range [19, 18) out of bounds for length 26
# Create a program listing def
)#Ordered of line
stat.sort() forline instat
tearelational xpression
op=fname=instr1java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
=3java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
print"s s % l,op)java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
elifop .e)
print elif=java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
_ " ine op)
first = 1 for in1: else: 0
_out += ", " ifp0andp]java.lang.StringIndexOutOfBoundsException: Range [37, 38) out of bounds for length 37
elif p[1
_ +self.xpr_strp1) else:
out + '%" %(p[0,)
first = 0
instr2
_out += instr[2]
print elif etype= pc+1 elif op= 'LET':
p("%s s=%"%
(line, self elseetype xpr0java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23
eop=''java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30
out:
first = 1
java.lang.StringIndexOutOfBoundsException: Range [19, 18) out of bounds for length 50
first: # Assignment
_ut=elfvar_str()
first = 0
print(_out) elif op = 'F'
(s s []=eval
,relexpr_str =': elif==' List assignment
rint
op=:
java.lang.StringIndexOutOfBoundsException: Range [17, 14) out of bounds for length 85
line dim1dim2
:
%%e(4)
print( elif dim2 def (elf =edim2java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37
print(" ( elif append:instr=selfrogljava.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35 in['' STOP,'ETURN]:
(line Variable already exists elifop=java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24
%
first = 1
="% tvar]-]d-1 = self.val(aluejava.lang.StringIndexOutOfBoundsException: Range [73, 74) out of bounds for length 73
first:
_outifnot first:
=0
y= :
_out += "%sraiseRuntimeError else
_out += "%s(%d,%d _out + '"s%'%([] .p1))
printjava.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27 elifo+
_out = elf }#
first=[2
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
_ =""
first elifop=L:
_out= v
print(_out)
# Erase the current program def()
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
#Insertstatements
forjava.lang.StringIndexOutOfBoundsException: Range [26, 25) out of bounds for length 29 elif =IF'
# Delete a statement def (self lineno: try: del self. op GOTO'orop =': except KeyError: pass
Messung V0.5 in Prozent
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.9Bemerkung:
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.