MCPcopy Create free account
hub / github.com/AlenVelocity/MeowScript / parse_expr

Method parse_expr

src/parser.rs:206–271  ·  view source on GitHub ↗
(&mut self, precedence: Precedence)

Source from the content-addressed store, hash-verified

204 }
205
206 fn parse_expr(&mut self, precedence: Precedence) -> Option<Expr> {
207 let mut left: Option<Expr> = match self.current_token {
208 Token::Ident(_) => self.parse_ident(),
209 Token::Bang | Token::Minus | Token::Plus => self.parse_prefix_expr(),
210 Token::LeftParen => self.parse_grouped_expr(),
211 Token::If => self.parse_if_expr(),
212 Token::Func => self.parse_fn_expr(),
213 Token::Number(_) => self.parse_int_literal(),
214 Token::Boolean(_) => self.parse_boolean_literal(),
215 Token::String(_) => self.parse_string_literal(),
216 Token::LeftBracket => self.parse_array_literal(),
217 Token::LeftBrace => self.parse_object_literal(),
218 Token::Typeof => self.parse_typof_expr(),
219 Token::Loop => self.parse_loop_expr(),
220 _ => {
221 None
222 }
223 };
224
225 while !self.peek_token(&Token::Semicolon) && precedence < self.next_token_precedence() {
226 match self.peek_token {
227 Token::Plus
228 | Token::Minus
229 | Token::Asterisk
230 | Token::Equals
231 | Token::Slash
232 | Token::Percent
233 | Token::NotEquals
234 | Token::Less
235 | Token::LessEqual
236 | Token::Greater
237 | Token::GreaterEqual
238 | Token::AND
239 | Token::OR
240 | Token::XOR
241 | Token::In => {
242 self.next_token();
243 left = self.parse_infix_expr(left.unwrap());
244 }
245
246 Token::LeftShift => {
247 self.lexer.next_token();
248 self.next_token();
249 left = self.parse_infix_expr(left.unwrap());
250 }
251
252 Token::RightShift => {
253 self.lexer.next_token();
254 self.next_token();
255 left = self.parse_infix_expr(left.unwrap());
256 }
257
258 Token::LeftParen => {
259 self.next_token();
260 left = self.parse_call_expr(left.unwrap());
261 }
262 Token::LeftBracket => {
263 self.next_token();

Callers 13

parse_expr_statementMethod · 0.80
parse_set_statementMethod · 0.80
parse_anew_exprMethod · 0.80
parse_typof_exprMethod · 0.80
parse_object_literalMethod · 0.80
parse_expr_listMethod · 0.80
parse_prefix_exprMethod · 0.80
parse_infix_exprMethod · 0.80
parse_grouped_exprMethod · 0.80
parse_if_exprMethod · 0.80
parse_call_argumentsMethod · 0.80

Calls 15

parse_identMethod · 0.80
parse_prefix_exprMethod · 0.80
parse_grouped_exprMethod · 0.80
parse_if_exprMethod · 0.80
parse_fn_exprMethod · 0.80
parse_int_literalMethod · 0.80
parse_boolean_literalMethod · 0.80
parse_string_literalMethod · 0.80
parse_array_literalMethod · 0.80
parse_object_literalMethod · 0.80
parse_typof_exprMethod · 0.80
parse_loop_exprMethod · 0.80

Tested by

no test coverage detected