def comp_expr(self): res = ParseResult() if self.current_tok.matches(Lexer.TT_KEYWORD, 'Tak_dapat'): op_tok = self.current_tok res.register_advancement() self.advance() node = res.register(self.comp_expr()) if res.error: return res return res.success(Lexer.UnaryOpNode(op_tok, node)) node = res.register( self.bin_op(self.arith_expr, (Lexer.TT_EE, Lexer.TT_NE, Lexer.TT_LT, Lexer.TT_GT, Lexer.TT_LTE, Lexer.TT_GTE))) if res.error: return res.failure( Lexer.InvalidSyntaxError( self.current_tok.pos_start, self.current_tok.pos_end, "Mengharapkan seperti (senja kala itu) int, float, identifier, '+', '-', '(', '[', 'Ketika_nada', 'Untuk_kita', 'Sedangkan', 'Fungsi' or 'Tak_dapat'" )) return res.success(node)
def factor(self): res = ParseResult() tok = self.current_tok if tok.type in (Lexer.TT_PLUS, Lexer.TT_MINUS): res.register_advancement() self.advance() factor = res.register(self.factor()) if res.error: return res return res.success(Lexer.UnaryOpNode(tok, factor)) return self.power()