SHARE
TWEET

Untitled

a guest Jun 25th, 2019 63 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // fixed scans tokens with fixed representations (but not keywords; those
  2. // are handled together with identifiers).
  3. func (sc *Scanner) fixed() error {
  4.     switch op := sc.curr; op {
  5.     case '+', '-':
  6.         // Add, Sub
  7.         sc.accept()
  8.         if sc.curr == op || sc.curr == '=' {
  9.             // AddAssign, Incr, SubAssign, Decr
  10.             sc.accept()
  11.         }
  12.     case '*', '/', '%':
  13.         // Mul, Quo, Rem
  14.         sc.accept()
  15.         if sc.curr == '=' {
  16.             // MulAssign, QuoAssign, RemAssign
  17.             sc.accept()
  18.         }
  19.     case '&', '|':
  20.         // And, Or
  21.         sc.accept()
  22.         if sc.curr == op || sc.curr == '=' {
  23.             // AndAssign, LogicalAnd, OrAssign, LogicalOr
  24.             sc.accept()
  25.         }
  26.     case '^':
  27.         // Xor
  28.         sc.accept()
  29.         if sc.curr == '=' {
  30.             sc.accept() // XorAssign
  31.         }
  32.     case '<':
  33.         // LessThan
  34.         sc.accept()
  35.         if sc.curr == '<' {
  36.             // ShiftLeft
  37.             sc.accept()
  38.             if sc.curr == '=' {
  39.                 // ShiftLeftAssign
  40.                 sc.accept()
  41.             }
  42.         }
  43.     case '>':
  44.         // GreaterThan
  45.         sc.accept()
  46.         if sc.curr == '>' {
  47.             // ShiftRight
  48.             sc.accept()
  49.             if sc.curr == '=' {
  50.                 // ShiftRightAssign
  51.                 sc.accept()
  52.             }
  53.         }
  54.     case '!':
  55.         // LogicalNot
  56.         sc.accept()
  57.         if sc.curr == '=' {
  58.             // NotEqual
  59.             sc.accept()
  60.         }
  61.     case '=':
  62.         // Assign
  63.         sc.accept()
  64.         if sc.curr == '=' {
  65.             // Equal
  66.             sc.accept()
  67.         }
  68.     case '(', ')', '[', ']', '{', '}', '@':
  69.         // OpenParen, ClosedParen, OpenBracket, ClosedBracket,
  70.         // OpenBrace, ClosedBrace, At
  71.         sc.accept()
  72.     default:
  73.         return xerrors.Errorf("unknown character %v", printableRune(op))
  74.     }
  75.     return nil
  76. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top