// Code generated by golex. DO NOT EDIT. // Copyright (c) 2011 CZ.NIC z.s.p.o. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // blame: jnml, labs.nic.cz package main import ( "bufio" "fmt" "go/token" "io" "os" "unicode" "github.com/cznic/golex/lex" ) // Allocate Character classes anywhere in [0x80, 0xFF]. const ( classUnicodeLeter = iota + 0x80 classUnicodeDigit classOther ) var sc int const ( INITIAL = iota PHP STRING STRING_VAR STRING_VAR_INDEX ) type lexer struct { *lex.Lexer } func begin(cond int) { sc = cond } func rune2Class(r rune) int { if r >= 0 && r < 0x80 { // Keep ASCII as it is. return int(r) } if unicode.IsLetter(r) { return classUnicodeLeter } if unicode.IsDigit(r) { return classUnicodeDigit } return classOther } func newLexer(src io.Reader, dst io.Writer, fName string) *lexer { file := token.NewFileSet().AddFile(fName, -1, 1<<31-1) lx, err := lex.New(file, bufio.NewReader(src), lex.RuneClass(rune2Class)) if err != nil { panic(err) } return &lexer{lx} } type yySymType struct{} func (l *lexer) unget(r rune) []byte { l.Unget(l.Lookahead()) chars := l.Token() lastChar := chars[len(chars)-1] if lastChar.Rune != r { return l.TokenBytes(nil) } l.Unget(lastChar) buf := l.TokenBytes(nil) buf = buf[:len(buf)-1] return buf } func (l *lexer) ungetN(n int) []byte { l.Unget(l.Lookahead()) chars := l.Token() for i := 1; i <= n; i++ { char := chars[len(chars)-i] l.Unget(char) } buf := l.TokenBytes(nil) buf = buf[:len(buf)-n] return buf } func (l *lexer) Lex() int { // Lex(lval *yySymType) c := l.Enter() yystate0: yyrule := -1 _ = yyrule c = l.Rule0() // ([\$]{NCH})* switch yyt := sc; yyt { default: panic(fmt.Errorf(`invalid start condition %d`, yyt)) case 0: // start condition: INITIAL goto yystart1 case 1: // start condition: PHP goto yystart11 case 2: // start condition: STRING goto yystart26 case 3: // start condition: STRING_VAR goto yystart56 case 4: // start condition: STRING_VAR_INDEX goto yystart66 } goto yystate0 // silence unused label error goto yyAction // silence unused label error yyAction: switch yyrule { case 1: goto yyrule1 case 2: goto yyrule2 case 3: goto yyrule3 case 4: goto yyrule4 case 5: goto yyrule5 case 6: goto yyrule6 case 7: goto yyrule7 case 8: goto yyrule8 case 9: goto yyrule9 case 10: goto yyrule10 case 11: goto yyrule11 case 12: goto yyrule12 case 13: goto yyrule13 case 14: goto yyrule14 case 15: goto yyrule15 case 16: goto yyrule16 case 17: goto yyrule17 case 18: goto yyrule18 case 19: goto yyrule19 case 20: goto yyrule20 case 21: goto yyrule21 case 22: goto yyrule22 case 23: goto yyrule23 case 24: goto yyrule24 case 25: goto yyrule25 case 26: goto yyrule26 case 27: goto yyrule27 case 28: goto yyrule28 } goto yystate1 // silence unused label error yystate1: c = l.Next() yystart1: switch { default: goto yyabort case c == '<': goto yystate5 case c == '\n': goto yystate4 case c == '\t' || c == '\r' || c == ' ': goto yystate3 case c >= '\x01' && c <= '\b' || c == '\v' || c == '\f' || c >= '\x0e' && c <= '\x1f' || c >= '!' && c <= ';' || c >= '=' && c <= 'ÿ': goto yystate2 } yystate2: c = l.Next() yyrule = 2 l.Mark() goto yyrule2 yystate3: c = l.Next() yyrule = 1 l.Mark() switch { default: goto yyrule1 case c == '\t' || c == '\n' || c == '\r' || c == ' ': goto yystate4 } yystate4: c = l.Next() yyrule = 1 l.Mark() switch { default: goto yyrule1 case c == '\t' || c == '\n' || c == '\r' || c == ' ': goto yystate4 } yystate5: c = l.Next() yyrule = 2 l.Mark() switch { default: goto yyrule2 case c == '?': goto yystate6 } yystate6: c = l.Next() yyrule = 3 l.Mark() switch { default: goto yyrule3 case c == '=': goto yystate7 case c == 'p': goto yystate8 } yystate7: c = l.Next() yyrule = 4 l.Mark() goto yyrule4 yystate8: c = l.Next() switch { default: goto yyabort case c == 'h': goto yystate9 } yystate9: c = l.Next() switch { default: goto yyabort case c == 'p': goto yystate10 } yystate10: c = l.Next() yyrule = 3 l.Mark() goto yyrule3 goto yystate11 // silence unused label error yystate11: c = l.Next() yystart11: switch { default: goto yyabort case c == '"': goto yystate15 case c == '$': goto yystate16 case c == '?': goto yystate22 case c == '\'': goto yystate18 case c == '\n': goto yystate14 case c == '\t' || c == '\r' || c == ' ': goto yystate13 case c == 'b': goto yystate24 case c >= '\x01' && c <= '\b' || c == '\v' || c == '\f' || c >= '\x0e' && c <= '\x1f' || c == '!' || c == '#' || c == '%' || c == '&' || c >= '(' && c <= '>' || c >= '@' && c <= 'a' || c >= 'c' && c <= 'ÿ': goto yystate12 } yystate12: c = l.Next() yyrule = 9 l.Mark() goto yyrule9 yystate13: c = l.Next() yyrule = 5 l.Mark() switch { default: goto yyrule5 case c == '\t' || c == '\n' || c == '\r' || c == ' ': goto yystate14 } yystate14: c = l.Next() yyrule = 5 l.Mark() switch { default: goto yyrule5 case c == '\t' || c == '\n' || c == '\r' || c == ' ': goto yystate14 } yystate15: c = l.Next() yyrule = 8 l.Mark() goto yyrule8 yystate16: c = l.Next() yyrule = 9 l.Mark() switch { default: goto yyrule9 case c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z' || c >= '\u007f' && c <= 'ÿ': goto yystate17 } yystate17: c = l.Next() yyrule = 28 l.Mark() switch { default: goto yyrule28 case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z' || c >= '\u007f' && c <= 'ÿ': goto yystate17 } yystate18: c = l.Next() yyrule = 9 l.Mark() switch { default: goto yyrule9 case c == '\'': goto yystate20 case c == '\\': goto yystate21 case c >= '\x01' && c <= '&' || c >= '(' && c <= '[' || c >= ']' && c <= 'ÿ': goto yystate19 } yystate19: c = l.Next() switch { default: goto yyabort case c == '\'': goto yystate20 case c == '\\': goto yystate21 case c >= '\x01' && c <= '&' || c >= '(' && c <= '[' || c >= ']' && c <= 'ÿ': goto yystate19 } yystate20: c = l.Next() yyrule = 7 l.Mark() goto yyrule7 yystate21: c = l.Next() switch { default: goto yyabort case c == '\'': goto yystate19 } yystate22: c = l.Next() yyrule = 9 l.Mark() switch { default: goto yyrule9 case c == '>': goto yystate23 } yystate23: c = l.Next() yyrule = 6 l.Mark() goto yyrule6 yystate24: c = l.Next() yyrule = 9 l.Mark() switch { default: goto yyrule9 case c == '"': goto yystate25 } yystate25: c = l.Next() yyrule = 8 l.Mark() goto yyrule8 goto yystate26 // silence unused label error yystate26: c = l.Next() yystart26: switch { default: goto yyabort case c == '"': goto yystate51 case c == '$': goto yystate52 case c == '\\': goto yystate38 case c == '{': goto yystate54 case c >= '\x01' && c <= '!' || c == '#' || c >= '%' && c <= '[' || c >= ']' && c <= 'z' || c >= '|' && c <= 'ÿ': goto yystate27 } yystate27: c = l.Next() switch { default: goto yyabort case c == '"': goto yystate28 case c == '$': goto yystate31 case c == '\\': goto yystate38 case c == '{': goto yystate41 case c >= '\x01' && c <= '!' || c == '#' || c >= '%' && c <= '[' || c >= ']' && c <= 'z' || c >= '|' && c <= 'ÿ': goto yystate27 } yystate28: c = l.Next() yyrule = 14 l.Mark() switch { default: goto yyrule14 case c == '$': goto yystate29 } yystate29: c = l.Next() switch { default: goto yyabort case c == '$': goto yystate29 case c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z' || c >= '\u007f' && c <= 'ÿ': goto yystate30 } yystate30: c = l.Next() yyrule = 17 l.Mark() goto yyrule17 yystate31: c = l.Next() switch { default: goto yyabort case c == '"': goto yystate34 case c == '$': goto yystate35 case c == '\\': goto yystate36 case c == '{': goto yystate50 case c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z' || c >= '\u007f' && c <= 'ÿ': goto yystate30 case c >= '\x01' && c <= '!' || c == '#' || c >= '%' && c <= '@' || c == '[' || c == ']' || c == '^' || c == '`' || c >= '|' && c <= '~': goto yystate32 } yystate32: c = l.Next() switch { default: goto yyabort case c == '"': goto yystate28 case c == '$': goto yystate33 case c == '\\': goto yystate38 case c == '{': goto yystate41 case c >= '\x01' && c <= '!' || c == '#' || c >= '%' && c <= '[' || c >= ']' && c <= 'z' || c >= '|' && c <= 'ÿ': goto yystate27 } yystate33: c = l.Next() switch { default: goto yyabort case c == '"': goto yystate34 case c == '$': goto yystate35 case c == '\\': goto yystate36 case c == '{': goto yystate50 case c >= '\x01' && c <= '!' || c == '#' || c >= '%' && c <= '@' || c == '[' || c == ']' || c == '^' || c == '`' || c >= '|' && c <= '~': goto yystate32 } yystate34: c = l.Next() yyrule = 14 l.Mark() goto yyrule14 yystate35: c = l.Next() switch { default: goto yyabort case c == '$': goto yystate35 case c == '\\': goto yystate36 case c == '{': goto yystate50 case c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z' || c >= '\u007f' && c <= 'ÿ': goto yystate30 case c >= '\x01' && c <= '!' || c == '#' || c >= '%' && c <= '@' || c == '[' || c == ']' || c == '^' || c == '`' || c >= '|' && c <= '~': goto yystate32 } yystate36: c = l.Next() switch { default: goto yyabort case c == '"': goto yystate37 case c == '$': goto yystate44 case c == '\\': goto yystate45 case c == '{': goto yystate48 case c >= '\x01' && c <= '!' || c == '#' || c >= '%' && c <= '[' || c >= ']' && c <= 'z' || c >= '|' && c <= 'ÿ': goto yystate27 } yystate37: c = l.Next() yyrule = 14 l.Mark() switch { default: goto yyrule14 case c == '"': goto yystate28 case c == '$': goto yystate31 case c == '\\': goto yystate38 case c == '{': goto yystate41 case c >= '\x01' && c <= '!' || c == '#' || c >= '%' && c <= '[' || c >= ']' && c <= 'z' || c >= '|' && c <= 'ÿ': goto yystate27 } yystate38: c = l.Next() switch { default: goto yyabort case c == '$': goto yystate39 case c >= '\x01' && c <= '\t' || c >= '\v' && c <= '#' || c >= '%' && c <= 'ÿ': goto yystate32 } yystate39: c = l.Next() switch { default: goto yyabort case c == '"': goto yystate28 case c == '$': goto yystate31 case c == '\\': goto yystate38 case c == '{': goto yystate41 case c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z' || c >= '\u007f' && c <= 'ÿ': goto yystate40 case c >= '\x01' && c <= '!' || c == '#' || c >= '%' && c <= '@' || c == '[' || c == ']' || c == '^' || c == '`' || c >= '|' && c <= '~': goto yystate27 } yystate40: c = l.Next() yyrule = 17 l.Mark() switch { default: goto yyrule17 case c == '"': goto yystate28 case c == '$': goto yystate31 case c == '\\': goto yystate38 case c == '{': goto yystate41 case c >= '\x01' && c <= '!' || c == '#' || c >= '%' && c <= '[' || c >= ']' && c <= 'z' || c >= '|' && c <= 'ÿ': goto yystate27 } yystate41: c = l.Next() switch { default: goto yyabort case c == '"': goto yystate34 case c == '$': goto yystate42 case c == '\\': goto yystate36 case c == '{': goto yystate43 case c >= '\x01' && c <= '!' || c == '#' || c >= '%' && c <= '[' || c >= ']' && c <= 'z' || c >= '|' && c <= 'ÿ': goto yystate32 } yystate42: c = l.Next() yyrule = 15 l.Mark() goto yyrule15 yystate43: c = l.Next() switch { default: goto yyabort case c == '$': goto yystate42 case c == '\\': goto yystate36 case c == '{': goto yystate43 case c >= '\x01' && c <= '!' || c == '#' || c >= '%' && c <= '[' || c >= ']' && c <= 'z' || c >= '|' && c <= 'ÿ': goto yystate32 } yystate44: c = l.Next() switch { default: goto yyabort case c == '"': goto yystate28 case c == '$': goto yystate31 case c == '\\': goto yystate45 case c == '{': goto yystate47 case c >= '\x01' && c <= '!' || c == '#' || c >= '%' && c <= '[' || c >= ']' && c <= 'z' || c >= '|' && c <= 'ÿ': goto yystate27 } yystate45: c = l.Next() switch { default: goto yyabort case c == '"': goto yystate37 case c == '$': goto yystate46 case c == '\\': goto yystate45 case c == '{': goto yystate48 case c >= '\x01' && c <= '!' || c == '#' || c >= '%' && c <= '[' || c >= ']' && c <= 'z' || c >= '|' && c <= 'ÿ': goto yystate27 } yystate46: c = l.Next() switch { default: goto yyabort case c == '"': goto yystate28 case c == '$': goto yystate31 case c == '\\': goto yystate45 case c == '{': goto yystate47 case c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z' || c >= '\u007f' && c <= 'ÿ': goto yystate40 case c >= '\x01' && c <= '!' || c == '#' || c >= '%' && c <= '@' || c == '[' || c == ']' || c == '^' || c == '`' || c >= '|' && c <= '~': goto yystate27 } yystate47: c = l.Next() yyrule = 16 l.Mark() switch { default: goto yyrule16 case c == '"': goto yystate34 case c == '$': goto yystate42 case c == '\\': goto yystate36 case c == '{': goto yystate43 case c >= '\x01' && c <= '!' || c == '#' || c >= '%' && c <= '[' || c >= ']' && c <= 'z' || c >= '|' && c <= 'ÿ': goto yystate32 } yystate48: c = l.Next() switch { default: goto yyabort case c == '"': goto yystate28 case c == '$': goto yystate49 case c == '\\': goto yystate45 case c == '{': goto yystate41 case c >= '\x01' && c <= '!' || c == '#' || c >= '%' && c <= '[' || c >= ']' && c <= 'z' || c >= '|' && c <= 'ÿ': goto yystate27 } yystate49: c = l.Next() yyrule = 15 l.Mark() switch { default: goto yyrule15 case c == '"': goto yystate34 case c == '$': goto yystate35 case c == '\\': goto yystate36 case c == '{': goto yystate50 case c >= '\x01' && c <= '!' || c == '#' || c >= '%' && c <= '@' || c == '[' || c == ']' || c == '^' || c == '`' || c >= '|' && c <= '~': goto yystate32 } yystate50: c = l.Next() yyrule = 16 l.Mark() goto yyrule16 yystate51: c = l.Next() yyrule = 10 l.Mark() switch { default: goto yyrule10 case c == '$': goto yystate29 } yystate52: c = l.Next() yyrule = 13 l.Mark() switch { default: goto yyrule13 case c == '"': goto yystate34 case c == '$': goto yystate35 case c == '\\': goto yystate36 case c == '{': goto yystate53 case c >= '\x01' && c <= '!' || c == '#' || c >= '%' && c <= '@' || c == '[' || c == ']' || c == '^' || c == '`' || c >= '|' && c <= '~': goto yystate32 } yystate53: c = l.Next() yyrule = 12 l.Mark() goto yyrule12 yystate54: c = l.Next() switch { default: goto yyabort case c == '"': goto yystate34 case c == '$': goto yystate55 case c == '\\': goto yystate36 case c == '{': goto yystate43 case c >= '\x01' && c <= '!' || c == '#' || c >= '%' && c <= '[' || c >= ']' && c <= 'z' || c >= '|' && c <= 'ÿ': goto yystate32 } yystate55: c = l.Next() yyrule = 11 l.Mark() goto yyrule11 goto yystate56 // silence unused label error yystate56: c = l.Next() yystart56: switch { default: goto yyabort case c == '$': goto yystate58 case c == '-': goto yystate60 case c == '[': goto yystate65 case c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z' || c >= '\u007f' && c <= 'ÿ': goto yystate63 case c >= '\x01' && c <= '\t' || c >= '\v' && c <= '#' || c >= '%' && c <= ',' || c >= '.' && c <= '@' || c >= '\\' && c <= '^' || c == '`' || c >= '{' && c <= '~': goto yystate57 } yystate57: c = l.Next() yyrule = 22 l.Mark() goto yyrule22 yystate58: c = l.Next() yyrule = 22 l.Mark() switch { default: goto yyrule22 case c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z' || c >= '\u007f' && c <= 'ÿ': goto yystate59 } yystate59: c = l.Next() yyrule = 18 l.Mark() switch { default: goto yyrule18 case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z' || c >= '\u007f' && c <= 'ÿ': goto yystate59 } yystate60: c = l.Next() yyrule = 22 l.Mark() switch { default: goto yyrule22 case c == '>': goto yystate61 } yystate61: c = l.Next() switch { default: goto yyabort case c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z' || c >= '\u007f' && c <= 'ÿ': goto yystate62 } yystate62: c = l.Next() yyrule = 19 l.Mark() switch { default: goto yyrule19 case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z' || c >= '\u007f' && c <= 'ÿ': goto yystate62 } yystate63: c = l.Next() yyrule = 20 l.Mark() switch { default: goto yyrule20 case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z' || c >= '\u007f' && c <= 'ÿ': goto yystate64 } yystate64: c = l.Next() yyrule = 20 l.Mark() switch { default: goto yyrule20 case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z' || c >= '\u007f' && c <= 'ÿ': goto yystate64 } yystate65: c = l.Next() yyrule = 21 l.Mark() goto yyrule21 goto yystate66 // silence unused label error yystate66: c = l.Next() yystart66: switch { default: goto yyabort case c == '$': goto yystate68 case c == ']': goto yystate74 case c >= '0' && c <= '9': goto yystate70 case c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z' || c >= '\u007f' && c <= 'ÿ': goto yystate72 case c >= '\x01' && c <= '\t' || c >= '\v' && c <= '#' || c >= '%' && c <= '/' || c >= ':' && c <= '@' || c == '[' || c == '\\' || c == '^' || c == '`' || c >= '{' && c <= '~': goto yystate67 } yystate67: c = l.Next() yyrule = 27 l.Mark() goto yyrule27 yystate68: c = l.Next() yyrule = 27 l.Mark() switch { default: goto yyrule27 case c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z' || c >= '\u007f' && c <= 'ÿ': goto yystate69 } yystate69: c = l.Next() yyrule = 24 l.Mark() switch { default: goto yyrule24 case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z' || c >= '\u007f' && c <= 'ÿ': goto yystate69 } yystate70: c = l.Next() yyrule = 23 l.Mark() switch { default: goto yyrule23 case c >= '0' && c <= '9': goto yystate71 } yystate71: c = l.Next() yyrule = 23 l.Mark() switch { default: goto yyrule23 case c >= '0' && c <= '9': goto yystate71 } yystate72: c = l.Next() yyrule = 25 l.Mark() switch { default: goto yyrule25 case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z' || c >= '\u007f' && c <= 'ÿ': goto yystate73 } yystate73: c = l.Next() yyrule = 25 l.Mark() switch { default: goto yyrule25 case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z' || c >= '\u007f' && c <= 'ÿ': goto yystate73 } yystate74: c = l.Next() yyrule = 26 l.Mark() goto yyrule26 yyrule1: // [ \t\n\r]+ goto yystate0 yyrule2: // . goto yystate0 yyrule3: // \<\?|\<\?php { fmt.Println("T_OPEN_TAG") begin(PHP) goto yystate0 } yyrule4: // \<\?= { fmt.Println("T_OPEN_TAG_WITH_ECHO") begin(PHP) goto yystate0 } yyrule5: // [ \t\n\r]+ { fmt.Println("T_WHITESPACE") goto yystate0 } yyrule6: // \?\> { fmt.Println("T_CLOSE_TAG") begin(INITIAL) goto yystate0 } yyrule7: // [\']([^\\\']*([\\][\'])*)*[\'] { fmt.Printf("T_CONSTANT_ENCAPSED_STRING: %s\n", l.TokenBytes(nil)) goto yystate0 } yyrule8: // [b]?[\"] { binPrefix := l.TokenBytes(nil)[0] == 'b' F: for { c := l.Next() if c == -1 { break } switch c { case '"': c = l.Next() fmt.Printf("T_CONSTANT_ENCAPSED_STRING: %s\n", l.TokenBytes(nil)) break F case '$': c = l.Next() if rune(c) == '{' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z' || c >= '\u007f' && c <= 'ÿ' { if binPrefix { l.ungetN(len(l.TokenBytes(nil)) - 2) fmt.Println("b\"") begin(STRING) } else { l.ungetN(len(l.TokenBytes(nil)) - 1) fmt.Println("\"") begin(STRING) } break F } else { l.ungetN(0) } case '{': c = l.Next() if rune(c) == '$' { if binPrefix { l.ungetN(len(l.TokenBytes(nil)) - 2) fmt.Println("b\"") begin(STRING) } else { l.ungetN(len(l.TokenBytes(nil)) - 1) fmt.Println("\"") begin(STRING) } break F } else { l.ungetN(0) } case '\\': c = l.Next() } } goto yystate0 } yyrule9: // . { fmt.Printf("other: %q\n", l.TokenBytes(nil)) goto yystate0 } yyrule10: // \" { fmt.Println("\"") begin(PHP) goto yystate0 } yyrule11: // \{\$ { fmt.Printf("T_CURLY_OPEN: %q\n", l.ungetN(1)) goto yystate0 } yyrule12: // \$\{ { fmt.Printf("T_DOLLAR_OPEN_CURLY_BRACES: %q\n", l.TokenBytes(nil)) goto yystate0 } yyrule13: // \$ { l.ungetN(1) begin(STRING_VAR) goto yystate0 } yyrule14: // {STR}{STR_END} { fmt.Printf("T_ENCAPSED_AND_WHITESPACE1: %q\n", l.ungetN(1)) goto yystate0 } yyrule15: // {STR}[\{]+[\$] { fmt.Printf("T_ENCAPSED_AND_WHITESPACE2: %q\n", l.ungetN(2)) goto yystate0 } yyrule16: // {STR}[\$]+[\{] { fmt.Printf("T_ENCAPSED_AND_WHITESPACE3: %q\n", l.ungetN(2)) goto yystate0 } yyrule17: // {STR}[^\{][\$]+[a-zA-Z_\x7f-\xff] { fmt.Printf("T_ENCAPSED_AND_WHITESPACE4: %q\n", l.ungetN(2)) goto yystate0 } yyrule18: // \${VAR_NAME} { fmt.Printf("T_VARIABLE: %q\n", l.TokenBytes(nil)) goto yystate0 } yyrule19: // ->{VAR_NAME} { fmt.Printf("T_OBJECT_OPERATOR: %q\n", l.ungetN(len(l.TokenBytes(nil))-2)) goto yystate0 } yyrule20: // {VAR_NAME} { fmt.Printf("T_STRING: %q\n", l.TokenBytes(nil)) begin(STRING) goto yystate0 } yyrule21: // \[ { fmt.Println("[") begin(STRING_VAR_INDEX) goto yystate0 } yyrule22: // . { l.ungetN(1) begin(STRING) goto yystate0 } yyrule23: // {D} { fmt.Printf("T_NUM_STRING: %q\n", l.TokenBytes(nil)) goto yystate0 } yyrule24: // \${VAR_NAME} { fmt.Printf("T_VARIABLE: %q\n", l.TokenBytes(nil)) goto yystate0 } yyrule25: // {VAR_NAME} { fmt.Printf("T_STRING: %q\n", l.TokenBytes(nil)) goto yystate0 } yyrule26: // \] { fmt.Println("\"]\"") begin(STRING) goto yystate0 } yyrule27: // . { fmt.Printf("%q\n", l.TokenBytes(nil)) goto yystate0 } yyrule28: // \${VAR_NAME} { fmt.Println("T_VARIABLE") goto yystate0 } panic("unreachable") goto yyabort // silence unused label error yyabort: // no lexem recognized if c, ok := l.Abort(); ok { return int(c) } goto yyAction } func main() { l := newLexer(os.Stdin, os.Stdout, "file.name") l.Lex() }