cscg24-lolpython

CSCG 2024 Challenge 'Can I Haz Lolpython?'
git clone https://git.sinitax.com/sinitax/cscg24-lolpython
Log | Files | Refs | sfeed.txt

basic.py (1482B)


      1# An implementation of Dartmouth BASIC (1964)
      2#
      3
      4import sys
      5sys.path.insert(0,"../..")
      6
      7import basiclex
      8import basparse
      9import basinterp
     10
     11# If a filename has been specified, we try to run it.
     12# If a runtime error occurs, we bail out and enter
     13# interactive mode below
     14if len(sys.argv) == 2:
     15    data = open(sys.argv[1]).read()
     16    prog = basparse.parse(data)
     17    if not prog: raise SystemExit
     18    b = basinterp.BasicInterpreter(prog)
     19    try:
     20        b.run()
     21        raise SystemExit
     22    except RuntimeError:
     23        pass
     24
     25else:
     26    b = basinterp.BasicInterpreter({})
     27
     28# Interactive mode.  This incrementally adds/deletes statements
     29# from the program stored in the BasicInterpreter object.  In
     30# addition, special commands 'NEW','LIST',and 'RUN' are added.
     31# Specifying a line number with no code deletes that line from
     32# the program.
     33
     34while 1:
     35    try:
     36        line = raw_input("[BASIC] ")
     37    except EOFError:
     38        raise SystemExit
     39    if not line: continue
     40    line += "\n"
     41    prog = basparse.parse(line)
     42    if not prog: continue
     43
     44    keys = prog.keys()
     45    if keys[0] > 0:
     46         b.add_statements(prog)
     47    else:
     48         stat = prog[keys[0]]
     49         if stat[0] == 'RUN':
     50             try:
     51                 b.run()
     52             except RuntimeError:
     53                 pass
     54         elif stat[0] == 'LIST':
     55             b.list()
     56         elif stat[0] == 'BLANK':
     57             b.del_line(stat[1])
     58         elif stat[0] == 'NEW':
     59             b.new()
     60
     61  
     62            
     63
     64
     65
     66
     67
     68