示例#1
0
 def __rvalue(self):
     # this is the one exception I made to advancing
     # before calling the function
     simple_rval_node = ast.SimpleRValue()
     if self.current_token.tokentype == token.NIL:
         simple_rval_node.val = self.current_token
         self.__advance()
         return simple_rval_node
     elif self.current_token.tokentype == token.NEW:
         self.__advance()
         new_rval_node = ast.NewRValue()
         new_rval_node.struct_type = self.current_token
         self.__eat(token.ID, "expecting an ID")
         return new_rval_node
     elif self.current_token.tokentype == token.STRINGVAL:
         simple_rval_node.val = self.current_token
         self.__advance()
         return simple_rval_node
     elif self.current_token.tokentype == token.INTVAL:
         simple_rval_node.val = self.current_token
         self.__advance()
         return simple_rval_node
     elif self.current_token.tokentype == token.BOOLVAL:
         simple_rval_node.val = self.current_token
         self.__advance()
         return simple_rval_node
     elif self.current_token.tokentype == token.FLOATVAL:
         simple_rval_node.val = self.current_token
         self.__advance()
         return simple_rval_node
     else:
         return self.idrval()
示例#2
0
 def __rvalue(self):
     """<rvalue> ::= STRINGVAL | INTVAL | BOOLVAL | FLOATVAL | NIL | NEW ID |<idrval>"""
     temp = self.current_token.tokentype
     rStmt = ast.SimpleRValue()
     rStmt.val = self.current_token
     if temp == token.STRINGVAL:
         self.__advance()
     elif temp == token.INTVAL:
         self.__advance()
     elif temp == token.BOOLVAL:
         self.__advance()
     elif temp == token.FLOATVAL:
         self.__advance()
     elif temp == token.NIL:
         self.__advance()
     elif temp == token.NEW:
         self.__advance()
         rStmt = ast.NewRValue()
         rStmt.struct_type = self.current_token
         self.__eat(token.ID, "expecting an id")
     else:
         rStmt = self.__idrval()
         #rStmt = ast.CallRValue()
         #rStmt.fun = self.current_token
         #self.__idrval(rStmt)
     return rStmt
示例#3
0
 def __rvalue(self, exprNode):
     if self.current_token.tokentype == token.STRINGVAL:
         exprNode.term = ast.SimpleRValue()
         exprNode.term.val = self.current_token
         self.__advance()
     elif self.current_token.tokentype == token.INTVAL:
         exprNode.term = ast.SimpleRValue()
         exprNode.term.val = self.current_token
         self.__advance()
     elif self.current_token.tokentype == token.BOOLVAL:
         exprNode.term = ast.SimpleRValue()
         exprNode.term.val = self.current_token
         self.__advance()
     elif self.current_token.tokentype == token.FLOATVAL:
         exprNode.term = ast.SimpleRValue()
         exprNode.term.val = self.current_token
         self.__advance()
     elif self.current_token.tokentype == token.NIL:
         exprNode.term = ast.SimpleRValue()
         exprNode.term.val = self.current_token
         self.__advance()
     elif self.current_token.tokentype == token.NEW:
         self.__advance()
         exprNode.term = ast.NewRValue()
         exprNode.term.struct_type = self.current_token
         self.__eat(token.ID, 'expecting id')
     else:
         self.__idrval(exprNode)
示例#4
0
 def __rvalue(self):
     """<rvalue> ::= STRING | INT | BOOL | FLOAT | NIL | NEW ID | <idrval>"""
     if (self.current_token.tokentype == token.STRINGVAL):
         simple_r_value_node = ast.SimpleRValue()
         simple_r_value_node.val = self.current_token
         self.__advance()
         return simple_r_value_node
     elif (self.current_token.tokentype == token.INTVAL):
         simple_r_value_node = ast.SimpleRValue()
         simple_r_value_node.val = self.current_token
         self.__advance()
         return simple_r_value_node
     elif (self.current_token.tokentype == token.BOOLVAL):
         simple_r_value_node = ast.SimpleRValue()
         simple_r_value_node.val = self.current_token
         self.__advance()
         return simple_r_value_node
     elif (self.current_token.tokentype == token.FLOATVAL):
         simple_r_value_node = ast.SimpleRValue()
         simple_r_value_node.val = self.current_token
         self.__advance()
         return simple_r_value_node
     elif (self.current_token.tokentype == token.NIL):
         simple_r_value_node = ast.SimpleRValue()
         simple_r_value_node.val = self.current_token
         self.__advance()
         return simple_r_value_node
     elif (self.current_token.tokentype == token.NEW):
         new_r_value_node = ast.NewRValue()
         self.__advance()
         new_r_value_node.struct_type = self.current_token
         self.__eat(token.ID, 'expecting "ID"')
         return new_r_value_node
     else:
         return self.__idrval()
示例#5
0
 def __rvalue(self):
     rvals = [
         token.STRINGVAL, token.INTVAL, token.BOOLVAL, token.FLOATVAL,
         token.NIL
     ]
     if self.current_token.tokentype in rvals:
         simple_rval_node = ast.SimpleRValue()
         simple_rval_node.val = self.current_token
         self.__advance()
         return simple_rval_node
     elif self.current_token.tokentype == token.NEW:
         self.__advance()
         new_rval_node = ast.NewRValue()
         new_rval_node.struct_type = self.current_token
         self.__eat(token.ID, 'expecting ID')
         return new_rval_node
     else:
         return self.__idrval()
示例#6
0
 def __rvalue(self):
     # print("rvalue: " + str(self.current_token))
     if (self.current_token.tokentype == token.STRINGVAL or
             self.current_token.tokentype == token.INTVAL or
             self.current_token.tokentype == token.BOOLVAL or
             self.current_token.tokentype == token.FLOATVAL or
             self.current_token.tokentype == token.NIL):
         simple_rvalue_node = ast.SimpleRValue()
         simple_rvalue_node.val = self.current_token
         self.__advance() # eat (we already know from 3-7 lines up)
         return simple_rvalue_node # return SimpleRValue node
     elif self.current_token.tokentype == token.NEW:
         self.__advance() # eat NEW (we already know from 1 line up)
         new_rvalue_node = ast.NewRValue()
         new_rvalue_node.struct_type = self.current_token
         self.__eat(token.ID, 'expected ID')
         return new_rvalue_node # return NewRValue node
     else:
         return self.__idrval() # return a different kind of RValue node
    def __rvalue(self):
        """<rvalue> ::= STRINGVAL | INTVAL | BOOLVAL | FLOATVAL | NIL | NEW ID | <idrval> """
        rvalues = [
            token.STRINGVAL, token.INTVAL, token.BOOLVAL, token.FLOATVAL,
            token.NIL
        ]

        rval = None
        if self.current_token.tokentype in rvalues:
            rval = ast.SimpleRValue()
            rval.val = self.current_token
            self.__advance()
        elif self.__tokenIs(token.NEW):
            self.__advance()
            rval = ast.NewRValue()
            rval.struct_type = self.current_token
            self.__eat(token.ID, "expected an ID")
        else:
            rval = self.__idrval()
        return rval
示例#8
0
 def __rvalue(self):
     """<rvalue> ::= STRINGVAL | INTVAL | BOOLVAL | FLOATVAL | NIL | NEW ID | <idrval>"""
     types = [token.STRINGVAL, token.INTVAL, token.BOOLVAL]
     types.extend([token.FLOATVAL, token.NIL])
     if self.current_token.tokentype == token.NEW:
         new_r_value_node = ast.NewRValue()
         self.__advance()
         new_r_value_node.struct_type = self.current_token
         self.__eat(token.ID, "expecting an identifier")
         return new_r_value_node
     elif self.current_token.tokentype == token.ID:
         return self.__idrval()
     elif self.current_token.tokentype in types:
         simple_rvalue_node = ast.SimpleRValue()
         simple_rvalue_node.val = self.current_token
         self.__advance()
         return simple_rvalue_node
     else:
         s = 'expected a rvalue found"' + self.current_token.lexeme + '" in parser'
         l = self.current_token.line
         c = self.current_token.column
         raise error.MyPLError(s, l, c)