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