Exemple #1
0
def read_atom(readerInst):
    """ this function will look at the contents of the token and return the appropriate scalar (simple/single) data type value. Initially, you can just implement numbers(integers) and symbols. This will allow you to proceed through the next couple of steps before you will need to implement the other fundamental MAL types: nil, true, false, and string. The remaining MAL types: keyword, vector, hash-map, and atom do not need to be implemented until step 9 (but can be implemented at any point between this step and that). BTW, symbol types are just objects that contain a single string name value."""

    if not readerInst.has_token():
        raise SyntaxError('reached EOF')

    malItem = readerInst.next()

    try:
        intNum = int(malItem)
        return parser.IntSymbol(intNum)
    except ValueError:
        #print ("malItem:", malItem)
        #print ("len:", len(malItem))
        if ((len(malItem) > 1) and (malItem[0] == '"')
                and (malItem[-1] == '"')):
            s = printer.unescape(malItem[1:-1])
            #print ("making lisp string:", s)
            #for i,c in enumerate(s):
            #    print (i, c)
            return parser.LispString(s)

        if ((len(malItem) > 1) and (malItem[0] == ':')):
            s = malItem[1:]
            return parser.LispKeyword(s)
        if malItem == 'nil':
            return parser.NilSymbol()
        elif malItem == 'true':
            return parser.TrueSymbol()
        elif malItem == 'false':
            return parser.FalseSymbol()
        else:
            return parser.StrSymbol(malItem)
Exemple #2
0
def func_fn_p(arg):
    dummy_func = lambda x: (x + 1)

    if ((isinstance(arg, parser.FuncClosure) and (not arg.isMacro))
            or (type(arg) == type(dummy_func))):
        return parser.TrueSymbol()
    else:
        return parser.FalseSymbol()
Exemple #3
0
def func_contains_p(hm, key):
    if not isinstance(hm, parser.LispHashMap):
        return parser.FalseSymbol()
    v = hm.lookup(key)
    if v is None:
        return parser.FalseSymbol()
    else:
        return parser.TrueSymbol()
Exemple #4
0
def func_number_p(arg):
    if (isinstance(arg, parser.IntSymbol)):
        return parser.TrueSymbol()
    else:
        return parser.FalseSymbol()
Exemple #5
0
def func_string_p(arg):
    if (isinstance(arg, parser.LispString)):
        return parser.TrueSymbol()
    else:
        return parser.FalseSymbol()
Exemple #6
0
def func_sequential_p(arg):
    if ((isinstance(arg, parser.LispList))
            or (isinstance(arg, parser.LispVector))):
        return parser.TrueSymbol()
    else:
        return parser.FalseSymbol()
Exemple #7
0
def func_map_p(arg):
    if (isinstance(arg, parser.LispHashMap)):
        return parser.TrueSymbol()
    else:
        return parser.FalseSymbol()
Exemple #8
0
def func_empty_p(arg):
    if len(arg.values) > 0:
        return parser.FalseSymbol()
    else:
        return parser.TrueSymbol()
Exemple #9
0
def func_keyword_p(arg):
    if isinstance(arg, parser.LispKeyword):
        return parser.TrueSymbol()
    else:
        return parser.FalseSymbol()
Exemple #10
0
def func_symbol_p(arg):
    if isinstance(arg, parser.StrSymbol):
        return parser.TrueSymbol()
    else:
        return parser.FalseSymbol()
Exemple #11
0
def func_nil_p(arg):
    if isinstance(arg, parser.NilSymbol):
        return parser.TrueSymbol()
    else:
        return parser.FalseSymbol()
Exemple #12
0
def func_atom_p(arg):
    if isinstance(arg, parser.LispAtom):
        return parser.TrueSymbol()
    else:
        return parser.FalseSymbol()
Exemple #13
0
def func_ge(a, b):
    if a.val >= b.val:
        return parser.TrueSymbol()
    return parser.FalseSymbol()
Exemple #14
0
def func_lt(a, b):
    if a.val < b.val:
        return parser.TrueSymbol()
    return parser.FalseSymbol()
Exemple #15
0
def func_eq(a, b):
    if (parser.compare_eq(a, b)):
        return parser.TrueSymbol()
    else:
        return parser.FalseSymbol()
Exemple #16
0
def func_macro_p(arg):
    if (isinstance(arg, parser.FuncClosure) and arg.isMacro):
        return parser.TrueSymbol()
    else:
        return parser.FalseSymbol()
Exemple #17
0
def func_list_p(arg):
    if isinstance(arg, parser.LispList):
        return parser.TrueSymbol()
    else:
        return parser.FalseSymbol()
Exemple #18
0
def func_vector_p(arg):
    if (isinstance(arg, parser.LispVector)):
        return parser.TrueSymbol()
    else:
        return parser.FalseSymbol()