Пример #1
0
def buildArray(l):
    assert (isinstance(l, list))
    assert (all(map(lambda x: isinstance(x, Interpreter.InAtom), l)))

    kvs = [(Interpreter.Symbol('Length'), Interpreter.Number(len(l)))]

    for i in range(0, len(l)):
        kvs.append((Interpreter.Number(float(i)), l[i]))

    return Interpreter.Dict(kvs)
Пример #2
0
def Pow(a, b):
    assert (isinstance(a, Interpreter.InAtom))
    assert (isinstance(b, Interpreter.InAtom))

    Utils.testNumber(a, 'Pow')
    Utils.testNumber(b, 'Pow')

    return Interpreter.Number(math.pow(a.value, b.value))
Пример #3
0
def Mod(a, b):
    assert (isinstance(a, Interpreter.InAtom))
    assert (isinstance(b, Interpreter.InAtom))

    Utils.testNumber(a, 'Mod')
    Utils.testNumber(b, 'Mod')

    res = math.fmod(a.value, b.value)

    return Interpreter.Number(res)
Пример #4
0
def GetModule():
    return Application.Module(
        'Core:Data:Number', {
            'pi': Interpreter.Number(3.1415926535897931),
            'e': Interpreter.Number(2.7182818284590451),
            'is-number?': Interpreter.BuiltIn(IsNumber),
            'add': Interpreter.BuiltIn(Add),
            'inc': Interpreter.BuiltIn(Inc),
            'sub': Interpreter.BuiltIn(Sub),
            'dec': Interpreter.BuiltIn(Dec),
            'mul': Interpreter.BuiltIn(Mul),
            'div': Interpreter.BuiltIn(Div),
            'mod': Interpreter.BuiltIn(Mod),
            'lt': Interpreter.BuiltIn(Lt),
            'lte': Interpreter.BuiltIn(Lte),
            'gt': Interpreter.BuiltIn(Gt),
            'gte': Interpreter.BuiltIn(Gte),
            'sin': Interpreter.BuiltIn(Sin),
            'cos': Interpreter.BuiltIn(Cos),
            'tan': Interpreter.BuiltIn(Tan),
            'ctg': Interpreter.BuiltIn(Ctg),
            'asin': Interpreter.BuiltIn(ASin),
            'acos': Interpreter.BuiltIn(ACos),
            'atan': Interpreter.BuiltIn(ATan),
            'actg': Interpreter.BuiltIn(ACtg),
            'rad2deg': Interpreter.BuiltIn(Rad2Deg),
            'deg2rad': Interpreter.BuiltIn(Deg2Rad),
            'exp': Interpreter.BuiltIn(Exp),
            'log': Interpreter.BuiltIn(Log),
            'ln': Interpreter.BuiltIn(Ln),
            'lg': Interpreter.BuiltIn(Lg),
            'sqrt': Interpreter.BuiltIn(Sqrt),
            'pow': Interpreter.BuiltIn(Pow),
            'abs': Interpreter.BuiltIn(Abs),
            'ceill': Interpreter.BuiltIn(Ceill),
            'floor': Interpreter.BuiltIn(Floor)
        }, {}, [
            'pi', 'e', 'is-number?', 'add', 'inc', 'sub', 'dec', 'mul', 'div',
            'mod', 'lt', 'lte', 'gt', 'gte', 'sin', 'cos', 'tan', 'ctg',
            'asin', 'acos', 'actg', 'rad2deg', 'deg2rad', 'exp', 'log', 'ln',
            'lg', 'sqrt', 'pow', 'abs', 'ceill', 'floor'
        ])
Пример #5
0
def argStarAsList(arg_star):
    assert (isinstance(arg_star, Interpreter.Dict))

    length = arg_star.get(Interpreter.Symbol('Length'))
    assert (length)
    new_ls = []

    for i in range(0, length.value):
        new_item = arg_star.get(Interpreter.Number(i))
        assert (new_item)
        new_ls.append(new_item)

    return new_ls
Пример #6
0
def Sub(a, b, va_star):
    assert (isinstance(a, Interpreter.InAtom))
    assert (isinstance(b, Interpreter.InAtom))
    assert (isinstance(va_star, Interpreter.InAtom))

    Utils.testNumber(a, 'Sub')
    Utils.testNumber(b, 'Sub')

    res = a.value - b.value
    va = Utils.argStarAsList(va_star)

    map(lambda x: Utils.testNumber(x, 'Sub'), va)

    for i in va:
        res = res - i.value

    return Interpreter.Number(res)
Пример #7
0
def Lg(a):
    assert (isinstance(a, Interpreter.InAtom))

    Utils.testNumber(a, 'Lg')

    return Interpreter.Number(math.log(a.value, 10))
Пример #8
0
def Ctg(a):
    assert (isinstance(a, Interpreter.InAtom))

    Utils.testNumber(a, 'Ctg')

    return Interpreter.Number(1 / math.tan(a.value))
Пример #9
0
def Inc(a):
    assert (isinstance(a, Interpreter.InAtom))

    Utils.testNumber(a, 'Inc')

    return Interpreter.Number(a.value + 1)
Пример #10
0
def Ceill(a):
    assert (isinstance(a, Interpreter.InAtom))

    Utils.testNumber(a, 'Ceill')

    return Interpreter.Number(math.ceil(a.value))
Пример #11
0
def Floor(a):
    assert (isinstance(a, Interpreter.InAtom))

    Utils.testNumber(a, 'Floor')

    return Interpreter.Number(math.floor(a.value))
Пример #12
0
def ASin(a):
    assert (isinstance(a, Interpreter.InAtom))

    Utils.testNumber(a, 'ASin')

    return Interpreter.Number(math.asin(a.value))
Пример #13
0
def Abs(a):
    assert (isinstance(a, Interpreter.InAtom))

    Utils.testNumber(a, 'Abs')

    return Interpreter.Number(math.fabs(a.value))
Пример #14
0
def Dec(a):
    assert (isinstance(a, Interpreter.InAtom))

    Utils.testNumber(a, 'Dec')

    return Interpreter.Number(a.value - 1)
Пример #15
0
def ACtg(a):
    assert (isinstance(a, Interpreter.InAtom))

    Utils.testNumber(a, 'ACtg')

    return Interpreter.Number(math.pi / 2 - math.atan(a.value))
Пример #16
0
def Exp(a):
    assert (isinstance(a, Interpreter.InAtom))

    Utils.testNumber(a, 'Exp')

    return Interpreter.Number(math.exp(a.value))
Пример #17
0
def Deg2Rad(a):
    assert (isinstance(a, Interpreter.InAtom))

    Utils.testNumber(a, 'Deg2Rad')

    return Interpreter.Number(math.radians(a.value))
Пример #18
0
def Rad2Deg(a):
    assert (isinstance(a, Interpreter.InAtom))

    Utils.testNumber(a, 'Rad2Deg')

    return Interpreter.Number(math.degrees(a.value))
Пример #19
0
def Sqrt(a):
    assert (isinstance(a, Interpreter.InAtom))

    Utils.testNumber(a, 'Sqrt')

    return Interpreter.Number(math.sqrt(a.value))
Пример #20
0
import Lexer as lx
import Parser as px
import Interpreter as ix


##################################################
# RUN
##################################################
global_symbol_table = ix.SymbolTable()
global_symbol_table.set("null", ix.Number(0))



def run(fn, text):
    lexer = lx.Lexer(fn, text)
    tokens, error = lexer.make_tokens()
    if error: return None, error

    # generate AST
    parser = px.Parser(tokens)
    ast = parser.parse()

    if ast.error: return None, ast.error

    # Run program
    interpreter = ix.Interpreter()
    context = ix.Context('<program>')
    context.symbol_table = global_symbol_table
    result = interpreter.visit(ast.node, context)

    return result.value, result.error