コード例 #1
0
 def p_sequence(self, p):
     """
     sequence : sequence COMMA expression
              | expression
     """
     if len(p) == 4:
         p[1].expressions.append(p[3])
         p[0] = p[1]
     else:
         p[0] = ast.Sequence(p[1])
コード例 #2
0
    def p_value(self, p):
        """
        value : FLOAT
              | INT
              | STRING
              | matrix
              | access
        """

        p[0] = ast.Value(p[1])
コード例 #3
0
 def p_block_curly(self, p):
     """
     block : block LCURLY block RCURLY
           | LCURLY block RCURLY
     """
     if len(p) == 5:
         p[1].instructions.append(p[3])
         p[0] = p[1]
     else:
         p[0] = ast.Block(p[2])
コード例 #4
0
 def p_block(self, p):
     """
     block : block instruction
           | instruction
     """
     if len(p) == 3:
         p[1].instructions.append(p[2])
         p[0] = p[1]
     else:
         p[0] = ast.Block(p[1])
コード例 #5
0
 def p_expression_math(self, p):
     """
     expression : expression PLUS expression
                | expression MINUS expression
                | expression TIMES expression
                | expression DIVIDE expression
                | expression DOTPLUS expression
                | expression DOTMINUS expression
                | expression DOTTIMES expression
                | expression DOTDIVIDE expression
     """
     p[0] = ast.BinaryExpression(p[1], p[2], p[3])
コード例 #6
0
 def p_if_statement(self, p):
     """
     if_statement : IF LPAREN relation RPAREN body %prec IF
     """
     p[0] = ast.If(p[3], p[5])
コード例 #7
0
 def p_expression_id(self, p):
     """expression : ID"""
     p[0] = ast.Variable(p[1])
コード例 #8
0
 def p_access(self, p):
     """
     access : ID LBRACKET sequence RBRACKET
     """
     p[0] = ast.Access(p[1], p[3])
コード例 #9
0
 def p_assignment(self, p):
     """
     assignment : variable assignment_operator expression
     """
     p[0] = ast.Assignment(p[1], p[2], p[3])
コード例 #10
0
 def p_program(self, p):
     """program : block"""
     p[0] = ast.Program(p[1])
コード例 #11
0
 def p_for_statement(self, p):
     """for_statement : FOR ID ASSIGN range body"""
     p[0] = ast.For(p[2], p[4], p[5])
コード例 #12
0
 def p_keyword_print(self, p):
     """
     keyword : PRINT sequence
     """
     p[0] = ast.Print(p[2])
コード例 #13
0
 def p_expression_fun(self, p):
     """
     expression : function LPAREN expression RPAREN
                | function LPAREN sequence RPAREN
     """
     p[0] = ast.Function(p[1], p[3])
コード例 #14
0
 def p_expression_transpose(self, p):
     """
     expression : LPAREN expression RPAREN TRANSPOSE
     """
     p[0] = ast.Transposition(p[2])
コード例 #15
0
 def p_id_transpose(self, p):
     """
     expression : ID TRANSPOSE
     """
     p[0] = ast.Transposition(ast.Variable(p[1]))
コード例 #16
0
 def p_expression_minus(self, p):
     """
     expression : MINUS expression %prec UMINUS
     """
     p[0] = ast.Negation(p[2])
コード例 #17
0
 def p_if_else_statement(self, p):
     """
     if_statement : IF LPAREN relation RPAREN body ELSE body
     """
     p[0] = ast.If(p[3], p[5], p[7])
コード例 #18
0
 def p_while_statement(self, p):
     """while_statement : WHILE LPAREN relation RPAREN body"""
     p[0] = ast.While(p[3], p[5])
コード例 #19
0
 def p_keyword_break(self, p):
     """
     keyword : BREAK
     """
     p[0] = ast.Break()
コード例 #20
0
 def p_range_step(self, p):
     """
      range : expression COLON expression COLON expression
     """
     p[0] = ast.Range(p[1], p[3], p[5])
コード例 #21
0
 def p_keyword_continue(self, p):
     """
     keyword : CONTINUE
     """
     p[0] = ast.Continue()
コード例 #22
0
 def p_keyword_return(self, p):
     """
     keyword : RETURN expression
     """
     p[0] = ast.Return(p[2])
コード例 #23
0
 def p_relation(self, p):
     """relation : expression comparison_operator expression"""
     p[0] = ast.BinaryExpression(p[1], p[2], p[3])
コード例 #24
0
 def p_statement(self, p):
     """
     statement : assignment
               | keyword
     """
     p[0] = ast.Instruction(p[1])
コード例 #25
0
 def p_matrix(self, p):
     """
     matrix : LBRACKET rows RBRACKET
     """
     p[0] = ast.Matrix(p[2])
コード例 #26
0
 def p_variable(self, p):
     """
     variable : ID
              | access
     """
     p[0] = ast.Variable(p[1])
コード例 #27
0
 def p_body_curly(self, p):
     """body : LCURLY block RCURLY"""
     p[0] = ast.Instruction(p[2])
コード例 #28
0
 def p_body(self, p):
     """body : instruction"""
     p[0] = ast.Instruction(p[1])
コード例 #29
0
 def p_row(self, p):
     """
     rows : sequence
     """
     p[0] = ast.Rows(p[1])