1// Code generated by gocc; DO NOT EDIT.
2
3// This file is dual licensed under CC0 and The gonum license.
4//
5// Copyright ©2017 The Gonum Authors. All rights reserved.
6// Use of this source code is governed by a BSD-style
7// license that can be found in the LICENSE file.
8//
9// Copyright ©2017 Robin Eklind.
10// This file is made available under a Creative Commons CC0 1.0
11// Universal Public Domain Dedication.
12
13package lexer
14
15import (
16	"io/ioutil"
17	"unicode/utf8"
18
19	"gonum.org/v1/gonum/graph/formats/dot/internal/token"
20)
21
22const (
23	NoState    = -1
24	NumStates  = 143
25	NumSymbols = 184
26)
27
28type Lexer struct {
29	src    []byte
30	pos    int
31	line   int
32	column int
33}
34
35func NewLexer(src []byte) *Lexer {
36	lexer := &Lexer{
37		src:    src,
38		pos:    0,
39		line:   1,
40		column: 1,
41	}
42	return lexer
43}
44
45func NewLexerFile(fpath string) (*Lexer, error) {
46	src, err := ioutil.ReadFile(fpath)
47	if err != nil {
48		return nil, err
49	}
50	return NewLexer(src), nil
51}
52
53func (l *Lexer) Scan() (tok *token.Token) {
54	tok = new(token.Token)
55	if l.pos >= len(l.src) {
56		tok.Type = token.EOF
57		tok.Pos.Offset, tok.Pos.Line, tok.Pos.Column = l.pos, l.line, l.column
58		return
59	}
60	start, startLine, startColumn, end := l.pos, l.line, l.column, 0
61	tok.Type = token.INVALID
62	state, rune1, size := 0, rune(-1), 0
63	for state != -1 {
64		if l.pos >= len(l.src) {
65			rune1 = -1
66		} else {
67			rune1, size = utf8.DecodeRune(l.src[l.pos:])
68			l.pos += size
69		}
70
71		nextState := -1
72		if rune1 != -1 {
73			nextState = TransTab[state](rune1)
74		}
75		state = nextState
76
77		if state != -1 {
78
79			switch rune1 {
80			case '\n':
81				l.line++
82				l.column = 1
83			case '\r':
84				l.column = 1
85			case '\t':
86				l.column += 4
87			default:
88				l.column++
89			}
90
91			switch {
92			case ActTab[state].Accept != -1:
93				tok.Type = ActTab[state].Accept
94				end = l.pos
95			case ActTab[state].Ignore != "":
96				start, startLine, startColumn = l.pos, l.line, l.column
97				state = 0
98				if start >= len(l.src) {
99					tok.Type = token.EOF
100				}
101
102			}
103		} else {
104			if tok.Type == token.INVALID {
105				end = l.pos
106			}
107		}
108	}
109	if end > start {
110		l.pos = end
111		tok.Lit = l.src[start:end]
112	} else {
113		tok.Lit = []byte{}
114	}
115	tok.Pos.Offset, tok.Pos.Line, tok.Pos.Column = start, startLine, startColumn
116
117	return
118}
119
120func (l *Lexer) Reset() {
121	l.pos = 0
122}
123
124/*
125Lexer symbols:
1260: 'n'
1271: 'o'
1282: 'd'
1293: 'e'
1304: 'N'
1315: 'o'
1326: 'd'
1337: 'e'
1348: 'N'
1359: 'O'
13610: 'D'
13711: 'E'
13812: 'e'
13913: 'd'
14014: 'g'
14115: 'e'
14216: 'E'
14317: 'd'
14418: 'g'
14519: 'e'
14620: 'E'
14721: 'D'
14822: 'G'
14923: 'E'
15024: 'g'
15125: 'r'
15226: 'a'
15327: 'p'
15428: 'h'
15529: 'G'
15630: 'r'
15731: 'a'
15832: 'p'
15933: 'h'
16034: 'G'
16135: 'R'
16236: 'A'
16337: 'P'
16438: 'H'
16539: 'd'
16640: 'i'
16741: 'g'
16842: 'r'
16943: 'a'
17044: 'p'
17145: 'h'
17246: 'D'
17347: 'i'
17448: 'g'
17549: 'r'
17650: 'a'
17751: 'p'
17852: 'h'
17953: 'd'
18054: 'i'
18155: 'G'
18256: 'r'
18357: 'a'
18458: 'p'
18559: 'h'
18660: 'D'
18761: 'i'
18862: 'G'
18963: 'r'
19064: 'a'
19165: 'p'
19266: 'h'
19367: 'D'
19468: 'I'
19569: 'G'
19670: 'R'
19771: 'A'
19872: 'P'
19973: 'H'
20074: 's'
20175: 'u'
20276: 'b'
20377: 'g'
20478: 'r'
20579: 'a'
20680: 'p'
20781: 'h'
20882: 'S'
20983: 'u'
21084: 'b'
21185: 'g'
21286: 'r'
21387: 'a'
21488: 'p'
21589: 'h'
21690: 's'
21791: 'u'
21892: 'b'
21993: 'G'
22094: 'r'
22195: 'a'
22296: 'p'
22397: 'h'
22498: 'S'
22599: 'u'
226100: 'b'
227101: 'G'
228102: 'r'
229103: 'a'
230104: 'p'
231105: 'h'
232106: 'S'
233107: 'U'
234108: 'B'
235109: 'G'
236110: 'R'
237111: 'A'
238112: 'P'
239113: 'H'
240114: 's'
241115: 't'
242116: 'r'
243117: 'i'
244118: 'c'
245119: 't'
246120: 'S'
247121: 't'
248122: 'r'
249123: 'i'
250124: 'c'
251125: 't'
252126: 'S'
253127: 'T'
254128: 'R'
255129: 'I'
256130: 'C'
257131: 'T'
258132: '{'
259133: '}'
260134: ';'
261135: '-'
262136: '-'
263137: '-'
264138: '>'
265139: '['
266140: ']'
267141: ','
268142: '='
269143: ':'
270144: '_'
271145: '-'
272146: '.'
273147: '-'
274148: '.'
275149: '\'
276150: '"'
277151: '\'
278152: '"'
279153: '"'
280154: '='
281155: '<'
282156: '>'
283157: '<'
284158: '>'
285159: '/'
286160: '/'
287161: '\n'
288162: '#'
289163: '\n'
290164: '/'
291165: '*'
292166: '*'
293167: '*'
294168: '/'
295169: ' '
296170: '\t'
297171: '\r'
298172: '\n'
299173: \u0001-'!'
300174: '#'-'['
301175: ']'-\u007f
302176: 'a'-'z'
303177: 'A'-'Z'
304178: '0'-'9'
305179: \u0080-\ufffc
306180: \ufffe-\U0010ffff
307181: \u0001-';'
308182: '?'-\u00ff
309183: .
310*/
311