Modernize Python 2 code to get ready for Python 3

This commit is contained in:
cclauss
2018-03-21 21:41:35 +01:00
parent d521abd5d7
commit 1fa9eb3c2b
42 changed files with 169 additions and 112 deletions

View File

@@ -1,10 +1,16 @@
#!/usr/local/bin/python
#
# f o r t h . p y
# Author: Chris Meyers @
# Author: Chris Meyers @
# http://openbookproject.net/py4fun/forth/forth.html
#
import sys, re
from __future__ import print_function
import re
try:
raw_input # Python 2
except NameError:
raw_input = input # Python 3
ds = [] # The data stack
cStack = [] # The control struct stack
@@ -15,14 +21,14 @@ words = [] # The input stream of tokens
def main() :
while 1 :
pcode = compile() # compile/run from user
if pcode == None : print; return
if pcode == None : print(); return
execute(pcode)
#============================== Lexical Parsing
def getWord (prompt="... ") :
global words
while not words :
while not words :
try : lin = raw_input(prompt)+"\n"
except : return None
if lin[0:1] == "@" : lin = open(lin[1:-1]).read()
@@ -56,8 +62,8 @@ def rSwap(cod,p) : a=ds.pop(); b=ds.pop(); ds.append(a); ds.append(b)
def rDup (cod,p) : ds.append(ds[-1])
def rDrop(cod,p) : ds.pop()
def rOver(cod,p) : ds.append(ds[-2])
def rDump(cod,p) : print "ds = ", ds
def rDot (cod,p) : print ds.pop()
def rDump(cod,p) : print("ds = ", ds)
def rDot (cod,p) : print(ds.pop())
def rJmp (cod,p) : return cod[p]
def rJnz (cod,p) : return (cod[p],p+1)[ds.pop()]
def rJz (cod,p) : return (p+1,cod[p])[ds.pop()==0]
@@ -92,7 +98,7 @@ rDict = {
'create': rCreate, 'does>': rDoes,
}
#================================= Compile time
#================================= Compile time
def compile() :
pcode = []; prompt = "Forth> "
@@ -114,12 +120,12 @@ def compile() :
try : pcode.append(int(word))
except :
try: pcode.append(float(word))
except :
except :
pcode[-1] = rRun # Change rPush to rRun
pcode.append(word) # Assume word will be defined
if not cStack : return pcode
prompt = "... "
def fatal (mesg) : raise mesg
def cColon (pcode) :
@@ -168,5 +174,5 @@ cDict = {
':' : cColon, ';' : cSemi, 'if': cIf, 'else': cElse, 'then': cThen,
'begin': cBegin, 'until': cUntil,
}
if __name__ == "__main__" : main()