github.com/TIBCOSoftware/flogo-lib@v0.5.9/core/mapper/exprmapper/expression/gocc/lexer/lexer.go (about) 1 // Code generated by gocc; DO NOT EDIT. 2 3 package lexer 4 5 import ( 6 "io/ioutil" 7 "unicode/utf8" 8 9 "github.com/TIBCOSoftware/flogo-lib/core/mapper/exprmapper/expression/gocc/token" 10 ) 11 12 const ( 13 NoState = -1 14 NumStates = 75 15 NumSymbols = 80 16 ) 17 18 type Lexer struct { 19 src []byte 20 pos int 21 line int 22 column int 23 } 24 25 func NewLexer(src []byte) *Lexer { 26 lexer := &Lexer{ 27 src: src, 28 pos: 0, 29 line: 1, 30 column: 1, 31 } 32 return lexer 33 } 34 35 func NewLexerFile(fpath string) (*Lexer, error) { 36 src, err := ioutil.ReadFile(fpath) 37 if err != nil { 38 return nil, err 39 } 40 return NewLexer(src), nil 41 } 42 43 func (l *Lexer) Scan() (tok *token.Token) { 44 tok = new(token.Token) 45 if l.pos >= len(l.src) { 46 tok.Type = token.EOF 47 tok.Pos.Offset, tok.Pos.Line, tok.Pos.Column = l.pos, l.line, l.column 48 return 49 } 50 start, startLine, startColumn, end := l.pos, l.line, l.column, 0 51 tok.Type = token.INVALID 52 state, rune1, size := 0, rune(-1), 0 53 for state != -1 { 54 if l.pos >= len(l.src) { 55 rune1 = -1 56 } else { 57 rune1, size = utf8.DecodeRune(l.src[l.pos:]) 58 l.pos += size 59 } 60 61 nextState := -1 62 if rune1 != -1 { 63 nextState = TransTab[state](rune1) 64 } 65 state = nextState 66 67 if state != -1 { 68 69 switch rune1 { 70 case '\n': 71 l.line++ 72 l.column = 1 73 case '\r': 74 l.column = 1 75 case '\t': 76 l.column += 4 77 default: 78 l.column++ 79 } 80 81 switch { 82 case ActTab[state].Accept != -1: 83 tok.Type = ActTab[state].Accept 84 end = l.pos 85 case ActTab[state].Ignore != "": 86 start, startLine, startColumn = l.pos, l.line, l.column 87 state = 0 88 if start >= len(l.src) { 89 tok.Type = token.EOF 90 } 91 92 } 93 } else { 94 if tok.Type == token.INVALID { 95 end = l.pos 96 } 97 } 98 } 99 if end > start { 100 l.pos = end 101 tok.Lit = l.src[start:end] 102 } else { 103 tok.Lit = []byte{} 104 } 105 tok.Pos.Offset, tok.Pos.Line, tok.Pos.Column = start, startLine, startColumn 106 107 return 108 } 109 110 func (l *Lexer) Reset() { 111 l.pos = 0 112 } 113 114 /* 115 Lexer symbols: 116 0: '"' 117 1: '"' 118 2: ''' 119 3: ''' 120 4: '$' 121 5: '|' 122 6: '|' 123 7: '&' 124 8: '&' 125 9: '(' 126 10: ')' 127 11: '=' 128 12: '=' 129 13: '!' 130 14: '=' 131 15: '<' 132 16: '<' 133 17: '=' 134 18: '>' 135 19: '>' 136 20: '=' 137 21: '+' 138 22: '-' 139 23: '*' 140 24: '/' 141 25: '%' 142 26: '(' 143 27: ')' 144 28: ',' 145 29: '?' 146 30: ':' 147 31: 't' 148 32: 'r' 149 33: 'u' 150 34: 'e' 151 35: 'f' 152 36: 'a' 153 37: 'l' 154 38: 's' 155 39: 'e' 156 40: 'n' 157 41: 'i' 158 42: 'l' 159 43: 'n' 160 44: 'u' 161 45: 'l' 162 46: 'l' 163 47: 'e' 164 48: 'E' 165 49: '+' 166 50: '-' 167 51: '.' 168 52: '.' 169 53: '.' 170 54: '.' 171 55: '_' 172 56: '[' 173 57: ']' 174 58: '.' 175 59: '-' 176 60: '[' 177 61: ']' 178 62: '_' 179 63: ' ' 180 64: '$' 181 65: '{' 182 66: '}' 183 67: '\' 184 68: ' ' 185 69: '\t' 186 70: '\n' 187 71: '\r' 188 72: '0'-'9' 189 73: 'a'-'z' 190 74: 'A'-'Z' 191 75: '0'-'9' 192 76: 'a'-'z' 193 77: 'A'-'Z' 194 78: '0'-'9' 195 79: . 196 */