예제 #1
0
def clear():
    global value_table
    global type_table
    global repl_heap
    global total_stmt

    value_table = sym_tbl.SymbolTable()
    type_table = sym_tbl.SymbolTable()
    repl_heap = {}
    total_stmt = ast.StmtList()
예제 #2
0
 def __init__(self):
     # initialize the symbol table (for ids -> types)
     self.sym_table = symbol_table.SymbolTable()
     # current_type holds the type of the last expression type
     self.current_type = None
     # global env (for return)
     self.sym_table.push_environment()
     # set global return type to int
     self.sym_table.add_id('return')
     self.sym_table.set_info('return', token.INTTYPE)
     # load in built-in function types
     self.sym_table.add_id('print')
     self.sym_table.set_info('print', [[token.STRINGTYPE], token.NIL])
     self.sym_table.add_id('length')
     self.sym_table.set_info('length', [[token.STRINGTYPE], token.INTTYPE])
     self.sym_table.add_id('get')
     self.sym_table.set_info(
         'get', [[token.INTTYPE, token.STRINGTYPE], token.STRINGTYPE])
     self.sym_table.add_id('reads')
     self.sym_table.set_info('reads', [[], token.STRINGTYPE])
     self.sym_table.add_id('readi')
     self.sym_table.set_info('readi', [[], token.INTTYPE])
     self.sym_table.add_id('readf')
     self.sym_table.set_info('readf', [[], token.FLOATTYPE])
     self.sym_table.add_id('itos')
     self.sym_table.set_info('itos', [[token.INTTYPE], token.STRINGTYPE])
     self.sym_table.add_id('itof')
     self.sym_table.set_info('itof', [[token.INTTYPE], token.FLOATTYPE])
     self.sym_table.add_id('ftos')
     self.sym_table.set_info('ftos', [[token.FLOATTYPE], token.STRINGTYPE])
     self.sym_table.add_id('stoi')
     self.sym_table.set_info('stoi', [[token.STRINGTYPE], token.INTTYPE])
     self.sym_table.add_id('stof')
     self.sym_table.set_info('stof', [[token.STRINGTYPE], token.FLOATTYPE])
예제 #3
0
 def __init__(self):
     # initialize the symbol table (for ids -> values)
     self.sym_table = sym_tbl.SymbolTable()
     # holds the type of last expression type
     self.current_value = None
     # the heap {oid:struct_obj}
     self.heap = {}
 def __init__(self):
     # initialize the symbol table (for ids -> values)
     self.sym_table = sym_tbl.SymbolTable()
     # holds the type of last expression type
     self.current_value = None
     self.current_token = None  #keeps the curren token for error reporting
     self.expressionIsTrue = True  #checks for conditional statements and loopss
     self.structDict = {}  #holds values of varDecls of the struct
     self.inStruct = False  #checks to see if enviroment is inside of a struct
     self.varId = "x"  #holds the current var id
     # the heap {oid:struct_obj}
     self.structId = 1
     self.heap = {}
예제 #5
0
 def __init__(self):
     # initialize the symbol table (for ids -> types)
     self.sym_table = symbol_table.SymbolTable()
     # current_type holds the type of the last expression type
     self.current_type = None
     #checks to see if we are inside a struct
     self.inStruct = False
     #dictionary for holding values for the dictionary
     self.dict = {}
     # global env (for return)
     self.sym_table.push_environment()
     # set global return type to int
     self.sym_table.add_id('return')
     self.sym_table.set_info('return', token.INTTYPE)
     # load in built-in function types
     self.sym_table.add_id('print')
     self.sym_table.set_info('print', [[token.STRINGVAL], token.NIL])
     self.sym_table.add_id('pass')
     self.sym_table.set_info('pass', token.INTTYPE)
     self.sym_table.add_id('reads')
     self.sym_table.set_info('reads', [[], token.STRINGVAL])
     self.sym_table.add_id('length')
     self.sym_table.set_info('length', [[token.STRINGVAL], token.INTVAL])
     self.sym_table.add_id('get')
     self.sym_table.set_info(
         'get', [[token.INTVAL, token.STRINGVAL], token.STRINGVAL])
     self.sym_table.add_id('stof')
     self.sym_table.set_info('stof', [[token.STRINGVAL], token.FLOATVAL])
     self.sym_table.add_id('ftos')
     self.sym_table.set_info('ftos', [[token.FLOATVAL], token.STRINGVAL])
     self.sym_table.add_id('itof')
     self.sym_table.set_info('itof', [[token.INTVAL], token.FLOATVAL])
     self.sym_table.add_id('itos')
     self.sym_table.set_info('itos', [[token.INTVAL], token.STRINGVAL])
     self.sym_table.add_id('stoi')
     self.sym_table.set_info('stoi', [[token.STRINGVAL], token.INTVAL])
     self.sym_table.add_id('reads')
     self.sym_table.set_info('reads', [[], token.STRINGVAL])
     self.sym_table.add_id('readf')
     self.sym_table.set_info('readf', [[], token.FLOATVAL])
예제 #6
0
 def __init__(self):
     # initialize symbol table (for ids -> values)
     self.sym_table = sym_tbl.SymbolTable()
     # holds the value of the last expression
     self.current_value = None
예제 #7
0
 def __init__(self):
     self.sym_table = mypl_symbol_table.SymbolTable()
     self.current_type = None
예제 #8
0
import mypl_interpreter as interpreter
import mypl_symbol_table as sym_tbl
import mypl_error as error
import mypl_print_visitor as ast_printer
import sys
# needed for load
import copy
from io import StringIO

# history
try:
    import readline
except ImportError:
    readline = None

value_table = sym_tbl.SymbolTable()
type_table = sym_tbl.SymbolTable()
repl_heap = {}
total_stmt = ast.StmtList()


def main():
    vocab = {'load', 'save', 'clear', 'exit', 'help'}
    readline.parse_and_bind('tab: complete')
    readline.set_completer(make_completer(vocab))

    print('MyPL REPL Version 1.0')
    print('Use ":" for commands, :help for list of commands.')
    keepGoing = True
    while (keepGoing):
        cur_stmt = input('>>> ')
예제 #9
0
 def __init__(self):
     self.sym_table = symbol_table.SymbolTable()
     self.current_value = None
     self.heap = {}