%{ package textparse import ( "fmt" "math" "strconv" ) // Lex is called by the parser generated by "go tool yacc" to obtain each // token. The method is opened before the matching rules block and closed at // the end of the file. func (l *lexer) Lex() int { const ( lstateInit = iota lstateValue lstateLabels lstateLName lstateLValue ) s := lstateInit if l.i >= len(l.b) { return eof } c := l.b[l.i] l.offsets = l.offsets[:0] %} D [0-9] L [a-zA-Z_] M [a-zA-Z_:] %x lstateValue lstateLabels lstateLName lstateLValue %yyc c %yyn c = l.next() %yyt s %% \0 return eof #[^\r\n]*\n l.mstart = l.i [\r\n \t]+ l.mstart = l.i {L}({L}|{D})*\{ s = lstateLabels l.offsets = append(l.offsets, l.i-1) {L}({L}|{D})* s = lstateValue l.mend = l.i l.offsets = append(l.offsets, l.i) [ \t]+ \} s = lstateValue l.mend = l.i ,? s = lstateLName l.offsets = append(l.offsets, l.i) {M}({M}|{D})*= s = lstateLValue l.offsets = append(l.offsets, l.i-1) \"(\\.|[^\\"])*\" s = lstateLabels l.offsets = append(l.offsets, l.i-1) \'(\\.|[^\\'])*\' s = lstateLabels l.offsets = append(l.offsets, l.i-1) [ \t]+ l.vstart = l.i (NaN) l.val = math.NaN() return 1 [^\n \t\r]+ // We don't parse strictly correct floats as the conversion // repeats the effort anyway. l.val, l.err = strconv.ParseFloat(yoloString(l.b[l.vstart:l.i]), 64) if l.err != nil { return -1 } return 1 %% return -1 }