Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // fixed scans tokens with fixed representations (but not keywords; those
- // are handled together with identifiers).
- func (sc *Scanner) fixed() error {
- switch op := sc.curr; op {
- case '+', '-':
- // Add, Sub
- sc.accept()
- if sc.curr == op || sc.curr == '=' {
- // AddAssign, Incr, SubAssign, Decr
- sc.accept()
- }
- case '*', '/', '%':
- // Mul, Quo, Rem
- sc.accept()
- if sc.curr == '=' {
- // MulAssign, QuoAssign, RemAssign
- sc.accept()
- }
- case '&', '|':
- // And, Or
- sc.accept()
- if sc.curr == op || sc.curr == '=' {
- // AndAssign, LogicalAnd, OrAssign, LogicalOr
- sc.accept()
- }
- case '^':
- // Xor
- sc.accept()
- if sc.curr == '=' {
- sc.accept() // XorAssign
- }
- case '<':
- // LessThan
- sc.accept()
- if sc.curr == '<' {
- // ShiftLeft
- sc.accept()
- if sc.curr == '=' {
- // ShiftLeftAssign
- sc.accept()
- }
- }
- case '>':
- // GreaterThan
- sc.accept()
- if sc.curr == '>' {
- // ShiftRight
- sc.accept()
- if sc.curr == '=' {
- // ShiftRightAssign
- sc.accept()
- }
- }
- case '!':
- // LogicalNot
- sc.accept()
- if sc.curr == '=' {
- // NotEqual
- sc.accept()
- }
- case '=':
- // Assign
- sc.accept()
- if sc.curr == '=' {
- // Equal
- sc.accept()
- }
- case '(', ')', '[', ']', '{', '}', '@':
- // OpenParen, ClosedParen, OpenBracket, ClosedBracket,
- // OpenBrace, ClosedBrace, At
- sc.accept()
- default:
- return xerrors.Errorf("unknown character %v", printableRune(op))
- }
- return nil
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement