about summary refs log tree commit diff
path: root/src/libsyntax/parse/prec.rs
blob: bd9ada9a3384370675e73cf6032171509d2d8cab (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
export as_prec;
export unop_prec;
export token_to_binop;

import token::*;
import token::token;
import ast::*;

/// Unary operators have higher precedence than binary
const unop_prec: uint = 100u;

/**
 * Precedence of the `as` operator, which is a binary operator
 * but is not represented in the precedence table.
 */
const as_prec: uint = 11u;

/**
 * Maps a token to a record specifying the corresponding binary
 * operator and its precedence
 */
fn token_to_binop(tok: token) -> option<ast::binop> {
  match tok {
      BINOP(STAR)    => some(mul),
      BINOP(SLASH)   => some(div),
      BINOP(PERCENT) => some(rem),
      // 'as' sits between here with 11
      BINOP(PLUS)    => some(add),
      BINOP(MINUS)   => some(subtract),
      BINOP(SHL)     => some(shl),
      BINOP(SHR)     => some(shr),
      BINOP(AND)     => some(bitand),
      BINOP(CARET)   => some(bitxor),
      BINOP(OR)      => some(bitor),
      LT             => some(lt),
      LE             => some(le),
      GE             => some(ge),
      GT             => some(gt),
      EQEQ           => some(eq),
      NE             => some(ne),
      ANDAND         => some(and),
      OROR           => some(or),
      _              => none
  }
}