示例#1
0
def _expr_q(tokens):
    if len(tokens) == 0:
        return []

    out = _do_symbol_equal(tokens, ["+", _expr_term, _expr_q])
    if out: return Capture("expr", out, tokens[0].line)

    out = _do_symbol_equal(tokens, ["-", _expr_term, _expr_q])
    if out: return Capture("expr", out, tokens[0].line)

    return True
示例#2
0
def _expr_primary(tokens):
    if len(tokens) == 0:
        return []

    out = _do_symbol_equal(tokens, ["LITERAL"])
    if out: return Capture("expr", out, tokens[0].line)

    out = _do_symbol_equal(tokens, ["SYMBOL"])
    if out: return Capture("expr", out, tokens[0].line)

    out = _do_symbol_equal(tokens, ["(", _expr, ")"])
    if out: return Capture("expr", out, tokens[0].line)
示例#3
0
def _condition(tokens):
    if len(tokens) == 0:
        return []

    # If ----------------------------------------
    out = _do_symbol_equal(tokens,
                           ["if", _expr, "then", "\n", _start, "end", "if"])
    if out: return Capture("condition", out, tokens[0].line)

    out = _do_symbol_equal(
        tokens, ["if", _expr, "then", "\n", _start, _else_condition])
    if out: return Capture("condition", out, tokens[0].line)
示例#4
0
def _loop(tokens):
    if len(tokens) == 0:
        return []

    out = _do_symbol_equal(tokens, [
        "loop", "SYMBOL", "from", _expr, "to", _expr, "\n", _start, "end",
        "loop"
    ])
    if out: return Capture("loop", out, tokens[0].line)

    out = _do_symbol_equal(
        tokens, ["loop", "while", _expr, "\n", _start, "end", "loop"])
    if out: return Capture("loop", out, tokens[0].line)
示例#5
0
def _keyword(tokens):
    if len(tokens) == 0:
        return []

    # Output ----------------------------------------
    out = _do_symbol_equal(tokens, ["output", _expr])
    if out: return Capture("keyword", out, tokens[0].line)

    # Input ----------------------------------------
    out = _do_symbol_equal(tokens, ["input", "SYMBOL"])
    if out: return Capture("keyword", out, tokens[0].line)

    # Debugger -----------------------------------------
    out = _do_symbol_equal(tokens, ["debugger"])
    if out: return Capture("keyword", out, tokens[0].line)
示例#6
0
def _expr(tokens):
    if len(tokens) == 0:
        return []

    # Maths -----------------------------------
    out = _do_symbol_equal(tokens, [_expr_term, _expr_q])
    if out: return Capture("expr", out, tokens[0].line)
示例#7
0
def _start(tokens):
    if len(tokens) == 0:
        return []

    # Assignment --------------------------------------
    out = _do_symbol_equal(tokens, ["SYMBOL", "=", _expr, "\n", _start])
    if out: return Capture("start", out, tokens[0].line)

    out = _do_symbol_equal(tokens, ["SYMBOL", "=", _expr, "\n"])
    if out: return Capture("start", out, tokens[0].line)

    # Expression --------------------------------------
    out = _do_symbol_equal(tokens, [_expr, "\n", _start])
    if out: return Capture("start", out, tokens[0].line)

    out = _do_symbol_equal(tokens, [_expr, "\n"])
    if out: return Capture("start", out, tokens[0].line)

    # Loops ------------------------------------------

    out = _do_symbol_equal(tokens, [_loop, "\n", _start])
    if out: return Capture("start", out, tokens[0].line)

    out = _do_symbol_equal(tokens, [_loop, "\n"])
    if out: return Capture("start", out, tokens[0].line)

    # Keywords ---------------------------------------

    out = _do_symbol_equal(tokens, [_keyword, "\n", _start])
    if out: return Capture("start", out, tokens[0].line)

    out = _do_symbol_equal(tokens, [_keyword, "\n"])
    if out: return Capture("start", out, tokens[0].line)

    # Conditions -------------------------------------

    out = _do_symbol_equal(tokens, [_condition, "\n", _start])
    if out: return Capture("start", out, tokens[0].line)

    out = _do_symbol_equal(tokens, [_condition, "\n"])
    if out: return Capture("start", out, tokens[0].line)
示例#8
0
def _expr_logic_q(tokens):
    if len(tokens) == 0:
        return []

    # Logic ----------------------------------------
    out = _do_symbol_equal(tokens, ["=", _expr_primary, _expr_logic_q])
    if out: return Capture("expr", out, tokens[0].line)

    out = _do_symbol_equal(tokens, ["<=", _expr_primary, _expr_logic_q])
    if out: return Capture("expr", out, tokens[0].line)

    out = _do_symbol_equal(tokens, [">=", _expr_primary, _expr_logic_q])
    if out: return Capture("expr", out, tokens[0].line)

    out = _do_symbol_equal(tokens, ["<", _expr_primary, _expr_logic_q])
    if out: return Capture("expr", out, tokens[0].line)

    out = _do_symbol_equal(tokens, [">", _expr_primary, _expr_logic_q])
    if out: return Capture("expr", out, tokens[0].line)

    out = _do_symbol_equal(tokens, ["!=", _expr_primary, _expr_logic_q])
    if out: return Capture("expr", out, tokens[0].line)

    return True
示例#9
0
def _expr_logic(tokens):
    if len(tokens) == 0:
        return []

    out = _do_symbol_equal(tokens, [_expr_primary, _expr_logic_q])
    if out: return Capture("expr", out, tokens[0].line)