Example #1
0
 def test_boolean_op_or(self):
     node = Node(vtype=v.OR, children=[self.int_node_zero, self.int_node_neg_one])
     backend.walk_ast(node)
     eq_(node.syn_value, True)
     node = Node(vtype=v.OR, children=[self.int_node_zero, self.int_node_zero])
     backend.walk_ast(node)
     eq_(node.syn_value, False)
Example #2
0
 def test_assignment(self):
     x_node = Node(vtype=v.IDENTIFIER, symbol='x')
     val_node = self.int_node_two
     assignment_node = Node(vtype=v.ASSIGNMENT, children=[x_node, val_node])
     backend.walk_ast(assignment_node)
     symbol_record = backend.scopes[-1][x_node.symbol]
     eq_(symbol_record, val_node)
Example #3
0
 def test_assignment(self):
     x_node = Node(vtype=v.IDENTIFIER, symbol='x')
     val_node = self.int_node_two
     assignment_node = Node(vtype=v.ASSIGNMENT, children=[x_node, val_node])
     backend.walk_ast(assignment_node)
     symbol_record = backend.scopes[-1][x_node.symbol]
     eq_(symbol_record, val_node)
Example #4
0
def main():
    if len(sys.argv) != 2:
        print 'Invalid number of arguments: <mongoose> <mongoose src code>'
        exit(1)
    src = open(sys.argv[1])
    backend.walk_ast(parser.parse(src.read()))
    backend.run()
Example #5
0
def main():
    if len(sys.argv) != 2:
        print 'Invalid number of arguments: <mongoose> <mongoose src code>'
        exit(1)
    src = open(sys.argv[1])
    backend.walk_ast(parser.parse(src.read()))
    backend.run()
Example #6
0
 def test_boolean_op_or(self):
     node = Node(vtype=v.OR,
                 children=[self.int_node_zero, self.int_node_neg_one])
     backend.walk_ast(node)
     eq_(node.syn_value, True)
     node = Node(vtype=v.OR,
                 children=[self.int_node_zero, self.int_node_zero])
     backend.walk_ast(node)
     eq_(node.syn_value, False)
Example #7
0
 def test_int_add(self):
     int_node_add = Node(vtype=v.ADD,
                          children=[self.int_node_one, self.int_node_two])
     backend.walk_ast(int_node_add)
     eq_(int_node_add.syn_value, 3)
     int_node_neg_two = Node(vtype=v.ADD,
                             children=[self.int_node_neg_one, self.int_node_neg_one])
     int_node_neg_four = Node(vtype=v.ADD,
                              children=[int_node_neg_two, int_node_neg_two])
     int_node_four = Node(vtype=v.ADD,
                          children=[self.int_node_two, self.int_node_two])
     int_node_result = Node(vtype=v.ADD,
                            children=[int_node_four, int_node_neg_four])
     backend.walk_ast(int_node_result)
     eq_(int_node_result.syn_value, 0)
Example #8
0
 def test_int_add(self):
     int_node_add = Node(vtype=v.ADD,
                         children=[self.int_node_one, self.int_node_two])
     backend.walk_ast(int_node_add)
     eq_(int_node_add.syn_value, 3)
     int_node_neg_two = Node(
         vtype=v.ADD,
         children=[self.int_node_neg_one, self.int_node_neg_one])
     int_node_neg_four = Node(vtype=v.ADD,
                              children=[int_node_neg_two, int_node_neg_two])
     int_node_four = Node(vtype=v.ADD,
                          children=[self.int_node_two, self.int_node_two])
     int_node_result = Node(vtype=v.ADD,
                            children=[int_node_four, int_node_neg_four])
     backend.walk_ast(int_node_result)
     eq_(int_node_result.syn_value, 0)
Example #9
0
    def execute_pif(self, prob=-1):
        if prob == -1:
            prob = random.uniform(0, 1)

        if not self.expression:
            backend.scopes.append({})
            backend.walk_ast(self.statements)
            backend.scopes.pop()
            return

        if self.expression.syn_value > prob:
            backend.scopes.append({})
            backend.walk_ast(self.statements)
            backend.scopes.pop()
        elif self.next_conditional:
            self.next_conditional.execute_pif(prob - self.expression.syn_value)
Example #10
0
    def execute_pif(self, prob=-1):
        if prob == -1:
            prob = random.uniform(0, 1)

        if not self.expression:
            backend.scopes.append({})
            backend.walk_ast(self.statements)
            backend.scopes.pop()
            return

        if self.expression.syn_value > prob:
            backend.scopes.append({})
            backend.walk_ast(self.statements)
            backend.scopes.pop()
        elif self.next_conditional:
            self.next_conditional.execute_pif(prob - self.expression.syn_value)
Example #11
0
    def execute_while(self):
        if not self.expression:
            backend.scopes.append({})
            backend.walk_ast(self.statements)
            backend.scopes.pop()
            return

        backend.walk_ast(self.expression)
        expr = self.expression.syn_value
        while expr:
            backend.scopes.append({})
            backend.walk_ast(self.statements)
            backend.scopes.pop()
            backend.walk_ast(self.expression)
            expr = self.expression.syn_value
Example #12
0
    def execute_while(self):
        if not self.expression:
            backend.scopes.append({})
            backend.walk_ast(self.statements)
            backend.scopes.pop()
            return

        backend.walk_ast(self.expression)
        expr = self.expression.syn_value
        while expr:
            backend.scopes.append({})
            backend.walk_ast(self.statements)
            backend.scopes.pop()
            backend.walk_ast(self.expression)
            expr = self.expression.syn_value
Example #13
0
    def execute_if(self):
        if not self.expression:
            backend.scopes.append({})
            backend.walk_ast(self.statements)
            backend.scopes.pop()
            return

        for child in self.expression.children:
            backend.walk_ast(child)
        backend.walk_ast(self.expression)
        if self.expression.syn_value:
            backend.scopes.append({})
            backend.walk_ast(self.statements)
            backend.scopes.pop()
        elif self.next_conditional:
            self.next_conditional.execute_if()
Example #14
0
    def execute_if(self):
        if not self.expression:
            backend.scopes.append({})
            backend.walk_ast(self.statements)
            backend.scopes.pop()
            return

        for child in self.expression.children:
            backend.walk_ast(child)
        backend.walk_ast(self.expression)
        if self.expression.syn_value:
            backend.scopes.append({})
            backend.walk_ast(self.statements)
            backend.scopes.pop()
        elif self.next_conditional:
            self.next_conditional.execute_if()
Example #15
0
 def test_boolean_op_not(self):
     node = Node(vtype=v.NOT, children=[self.int_node_zero])
     backend.walk_ast(node)
     eq_(node.syn_value, True)
     node = Node(vtype=v.NOT, children=[self.string_node_empty])
     backend.walk_ast(node)
     eq_(node.syn_value, True)
     node = Node(vtype=v.NOT, children=[self.float_node_neg_one])
     backend.walk_ast(node)
     eq_(node.syn_value, False)
Example #16
0
 def test_boolean_op_not(self):
     node = Node(vtype=v.NOT, children=[self.int_node_zero])
     backend.walk_ast(node)
     eq_(node.syn_value, True)
     node = Node(vtype=v.NOT, children=[self.string_node_empty])
     backend.walk_ast(node)
     eq_(node.syn_value, True)
     node = Node(vtype=v.NOT, children=[self.float_node_neg_one])
     backend.walk_ast(node)
     eq_(node.syn_value, False)
Example #17
0
    def execute_repeat(self):
        if not self.expression:
            backend.scopes.append({})
            backend.walk_ast(self.statements)
            backend.scopes.pop()
            return

        backend.walk_ast(self.expression)
        if self.expression.syn_vtype != v.INTEGER_VALUE:
            raise TypeError, "Expression in repeat statement has to be of type int"
        for i in xrange(self.expression.syn_value):
            backend.scopes.append({})
            backend.walk_ast(self.statements)
            backend.scopes.pop()
Example #18
0
    def execute_repeat(self):
        if not self.expression:
            backend.scopes.append({})
            backend.walk_ast(self.statements)
            backend.scopes.pop()
            return

        backend.walk_ast(self.expression)
        if self.expression.syn_vtype != v.INTEGER_VALUE:
            raise TypeError, "Expression in repeat statement has to be of type int"
        for i in xrange(self.expression.syn_value):
            backend.scopes.append({})
            backend.walk_ast(self.statements)
            backend.scopes.pop()
Example #19
0
 def test_int_subtract(self):
     int_node_subtract = Node(
         vtype=v.SUBTRACT, children=[self.int_node_one, self.int_node_two])
     backend.walk_ast(int_node_subtract)
     eq_(int_node_subtract.syn_value, -1)
Example #20
0
 def test_ints_equal(self):
     int_node_equal = Node(vtype=v.EQUAL,
                           children=[self.int_node_one, self.int_node_one])
     backend.walk_ast(int_node_equal)
     eq_(int_node_equal.syn_value, True)
Example #21
0
 def test_int_greater_than_equal(self):
     int_node_greater_than_equal = Node(vtype=v.GREATER_THAN_EQUAL,
                          children=[self.int_node_one, self.int_node_one])
     backend.walk_ast(int_node_greater_than_equal)
     eq_(int_node_greater_than_equal.syn_value, True)
Example #22
0
 def test_int_less_than_equal(self):
     int_node_less_than_equal = Node(vtype=v.LESS_THAN_EQUAL,
                          children=[self.int_node_one, self.int_node_one])
     backend.walk_ast(int_node_less_than_equal)
     eq_(int_node_less_than_equal.syn_value, True)
Example #23
0
 def test_int_modulus(self):
     int_node_modulus = Node(vtype=v.MODULUS,
                          children=[self.int_node_one, self.int_node_two])
     backend.walk_ast(int_node_modulus)
     eq_(int_node_modulus.syn_value, 1)
Example #24
0
 def test_int_divide(self):
     int_node_divide = Node(vtype=v.DIVIDE,
                          children=[self.int_node_one, self.int_node_two])
     backend.walk_ast(int_node_divide)
     eq_(int_node_divide.syn_value, 0)
Example #25
0
 def test_int_less_than_equal(self):
     int_node_less_than_equal = Node(
         vtype=v.LESS_THAN_EQUAL,
         children=[self.int_node_one, self.int_node_one])
     backend.walk_ast(int_node_less_than_equal)
     eq_(int_node_less_than_equal.syn_value, True)
Example #26
0
 def test_int_power(self):
     int_node_power = Node(vtype=v.POWER,
                           children=[self.int_node_one, self.int_node_two])
     backend.walk_ast(int_node_power)
     eq_(int_node_power.syn_value, 1)
Example #27
0
 def test_int_greater_than(self):
     int_node_greater_than = Node(
         vtype=v.GREATER_THAN,
         children=[self.int_node_one, self.int_node_two])
     backend.walk_ast(int_node_greater_than)
     eq_(int_node_greater_than.syn_value, False)
Example #28
0
 def execute(self, *args):
     backend.scopes.append(self._bind_params(*args))
     backend.walk_ast(self.statements)
     r = backend.walk_ast(self.return_value)
     backend.scopes.pop()
     return r
Example #29
0
 def test_int_subtract(self):
     int_node_subtract = Node(vtype=v.SUBTRACT,
                          children=[self.int_node_one, self.int_node_two])
     backend.walk_ast(int_node_subtract)
     eq_(int_node_subtract.syn_value, -1)
Example #30
0
 def test_boolean_op_and_no_args(self):
     node = Node(vtype=v.AND, children=[])
     backend.walk_ast(node)
Example #31
0
 def test_int_multiply(self):
     int_node_multiply = Node(vtype=v.MULTIPLY,
                          children=[self.int_node_one, self.int_node_two])
     backend.walk_ast(int_node_multiply)
     eq_(int_node_multiply.syn_value, 2)
Example #32
0
 def test_boolean_op_and_no_args(self):
     node = Node(vtype=v.AND, children=[])
     backend.walk_ast(node)
Example #33
0
 def test_int_power(self):
     int_node_power = Node(vtype=v.POWER,
                          children=[self.int_node_one, self.int_node_two])
     backend.walk_ast(int_node_power)
     eq_(int_node_power.syn_value, 1)
Example #34
0
 def test_boolean_op_and_one_arg(self):
     node = Node(vtype=v.AND, children=[self.float_node_one])
     backend.walk_ast(node)
Example #35
0
 def test_int_less_than(self):
     int_node_less_than = Node(vtype=v.LESS_THAN,
                          children=[self.int_node_one, self.int_node_two])
     backend.walk_ast(int_node_less_than)
     eq_(int_node_less_than.syn_value, True)
Example #36
0
 def test_boolean_op_and_one_arg(self):
     node = Node(vtype=v.AND, children=[self.float_node_one])
     backend.walk_ast(node)
Example #37
0
 def test_int_greater_than(self):
     int_node_greater_than = Node(vtype=v.GREATER_THAN,
                          children=[self.int_node_one, self.int_node_two])
     backend.walk_ast(int_node_greater_than)
     eq_(int_node_greater_than.syn_value, False)
Example #38
0
 def test_int_less_than(self):
     int_node_less_than = Node(
         vtype=v.LESS_THAN, children=[self.int_node_one, self.int_node_two])
     backend.walk_ast(int_node_less_than)
     eq_(int_node_less_than.syn_value, True)
Example #39
0
 def test_ints_equal(self):
     int_node_equal = Node(vtype=v.EQUAL,
                           children=[self.int_node_one, self.int_node_one])
     backend.walk_ast(int_node_equal)
     eq_(int_node_equal.syn_value, True)
Example #40
0
 def test_int_multiply(self):
     int_node_multiply = Node(
         vtype=v.MULTIPLY, children=[self.int_node_one, self.int_node_two])
     backend.walk_ast(int_node_multiply)
     eq_(int_node_multiply.syn_value, 2)
Example #41
0
 def test_int_divide(self):
     int_node_divide = Node(vtype=v.DIVIDE,
                            children=[self.int_node_one, self.int_node_two])
     backend.walk_ast(int_node_divide)
     eq_(int_node_divide.syn_value, 0)
Example #42
0
 def test_int_greater_than_equal(self):
     int_node_greater_than_equal = Node(
         vtype=v.GREATER_THAN_EQUAL,
         children=[self.int_node_one, self.int_node_one])
     backend.walk_ast(int_node_greater_than_equal)
     eq_(int_node_greater_than_equal.syn_value, True)
Example #43
0
 def test_float_bool_incomparable_equal(self):
     equal_node = Node(vtype=v.EQUAL, children=[self.float_node_one, self.bool_node_true])
     backend.walk_ast(equal_node)
Example #44
0
 def test_int_modulus(self):
     int_node_modulus = Node(
         vtype=v.MODULUS, children=[self.int_node_one, self.int_node_two])
     backend.walk_ast(int_node_modulus)
     eq_(int_node_modulus.syn_value, 1)
Example #45
0
 def execute(self, *args):
     backend.scopes.append(self._bind_params(*args))
     backend.walk_ast(self.statements)
     r = backend.walk_ast(self.return_value)
     backend.scopes.pop()
     return r
Example #46
0
 def test_float_bool_incomparable_equal(self):
     equal_node = Node(vtype=v.EQUAL,
                       children=[self.float_node_one, self.bool_node_true])
     backend.walk_ast(equal_node)