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