Example #1
0
def build(s_exp):
    '''
    Build Domain AST from the given S-expression
    '''
    assert_node(s_exp, s_expression.List)
    assert_child(s_exp, 0, s_expression.Symbol, lex_token.DOMAIN)
    name_expr = assert_child(s_exp, 1, s_expression.Symbol)

    domain = node_type.Domain()
    domain.name = lex_token.fixup_name(name_expr.text)

    for child_expr in s_exp.children[2:]:
        assert_node(child_expr, s_expression.List)
        symbol = assert_child(child_expr, 0, s_expression.Symbol)

        if symbol.text == lex_token.METHOD:
            method = build_method(child_expr)
            domain.children.append(method)
            domain.method_map[method.name] = method

        if symbol.text == lex_token.MODULE:
            module_name = assert_child(child_expr, 1, s_expression.Symbol).text

            if len(child_expr.children) == 3:
                symbol_name = assert_child(child_expr, 2, s_expression.Symbol).text
            else:
                symbol_name = None

            domain.modules.append((module_name, symbol_name))

        if lex_token.is_constant(symbol.text):
            rhs_expr = assert_child(child_expr, 1, [s_expression.List, s_expression.Symbol, s_expression.Number])
            domain.constants[symbol.text] = term.build(rhs_expr)

    return domain
Example #2
0
def build(s_expr):
    node = node_type.Term()

    if match_node(s_expr, s_expression.List):
        assert_child(s_expr, 0, s_expression.Symbol,
                     [lex_token.CALL, lex_token.VAR_REF])

        if match_child(s_expr, 0, s_expression.Symbol, lex_token.CALL):
            node.term_type = node_type.TERM_CALL
            node.name = assert_child(s_expr, 1, s_expression.Symbol).text

            for child_expr in s_expr.children[2:]:
                child_node = build(child_expr)
                node.children.append(child_node)

            return node

        if match_child(s_expr, 0, s_expression.Symbol, lex_token.VAR_REF):
            node.term_type = node_type.TERM_VAR_REF
            node.name = assert_child(s_expr, 1, s_expression.Symbol).text
            return node

    if match_node(s_expr, s_expression.Number):
        node.name = s_expr.value
        node.term_type = node_type.TERM_NUMBER
        return node

    if match_node(s_expr, s_expression.Symbol):
        node.name = s_expr.text

        if lex_token.is_variable(s_expr.text):
            node.term_type = node_type.TERM_VAR
            return node

        if lex_token.is_constant(s_expr.text):
            node.term_type = node_type.TERM_CONST_REF
            return node

        node.term_type = node_type.TERM_SYMBOL
        return node
Example #3
0
def build(s_expr):
    node = node_type.Term()

    if match_node(s_expr, s_expression.List):
        assert_child(s_expr, 0, s_expression.Symbol, [lex_token.CALL, lex_token.VAR_REF])

        if match_child(s_expr, 0, s_expression.Symbol, lex_token.CALL):
            node.term_type = node_type.TERM_CALL
            node.name = assert_child(s_expr, 1, s_expression.Symbol).text

            for child_expr in s_expr.children[2:]:
                child_node = build(child_expr)
                node.children.append(child_node)

            return node

        if match_child(s_expr, 0, s_expression.Symbol, lex_token.VAR_REF):
            node.term_type = node_type.TERM_VAR_REF
            node.name = assert_child(s_expr, 1, s_expression.Symbol).text
            return node

    if match_node(s_expr, s_expression.Number):
        node.name = s_expr.value
        node.term_type = node_type.TERM_NUMBER
        return node

    if match_node(s_expr, s_expression.Symbol):
        node.name = s_expr.text

        if lex_token.is_variable(s_expr.text):
            node.term_type = node_type.TERM_VAR
            return node

        if lex_token.is_constant(s_expr.text):
            node.term_type = node_type.TERM_CONST_REF
            return node

        node.term_type = node_type.TERM_SYMBOL
        return node
Example #4
0
def build(s_exp):
    '''
    Build Domain AST from the given S-expression
    '''
    assert_node(s_exp, s_expression.List)
    assert_child(s_exp, 0, s_expression.Symbol, lex_token.DOMAIN)
    name_expr = assert_child(s_exp, 1, s_expression.Symbol)

    domain = node_type.Domain()
    domain.name = lex_token.fixup_name(name_expr.text)

    for child_expr in s_exp.children[2:]:
        assert_node(child_expr, s_expression.List)
        symbol = assert_child(child_expr, 0, s_expression.Symbol)

        if symbol.text == lex_token.METHOD:
            method = build_method(child_expr)
            domain.children.append(method)
            domain.method_map[method.name] = method

        if symbol.text == lex_token.MODULE:
            module_name = assert_child(child_expr, 1, s_expression.Symbol).text

            if len(child_expr.children) == 3:
                symbol_name = assert_child(child_expr, 2,
                                           s_expression.Symbol).text
            else:
                symbol_name = None

            domain.modules.append((module_name, symbol_name))

        if lex_token.is_constant(symbol.text):
            rhs_expr = assert_child(
                child_expr, 1,
                [s_expression.List, s_expression.Symbol, s_expression.Number])
            domain.constants[symbol.text] = term.build(rhs_expr)

    return domain