Advertisement
Guest User

Untitled

a guest
Jun 25th, 2019
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.49 KB | None | 0 0
  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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement