%{ package textparse import ( "fmt" "math" "strconv" ) //type lstate int // 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] %} 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 0 #[^\r\n]*\n l.mstart = l.i [\r\n \t]+ l.mstart = l.i {L}({L}|{D})*\{ s = lstateLName {L}({L}|{D})* s = lstateValue l.mend = l.i [ \t]+ \} s = lstateValue l.mend = l.i ,? s = lstateLName {M}({M}|{D})*= s = lstateLValue \"(\\.|[^\\"])*\" s = lstateLabels \'(\\.|[^\\'])*\' s = lstateLabels [ \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 }