1312 lines
22 KiB
Go
1312 lines
22 KiB
Go
// 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
|
|
case 29:
|
|
goto yyrule29
|
|
}
|
|
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 = 29
|
|
l.Mark()
|
|
switch {
|
|
default:
|
|
goto yyrule29
|
|
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 yystate70
|
|
case c == '\n':
|
|
goto yystate69
|
|
case c == '\t' || c == '\r' || c == ' ' || c == '#' || c == '\'' || c == '\\':
|
|
goto yystate68
|
|
case c == ']':
|
|
goto yystate76
|
|
case c >= '0' && c <= '9':
|
|
goto yystate72
|
|
case c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z' || c >= '\u007f' && c <= 'ÿ':
|
|
goto yystate74
|
|
case c >= '\x01' && c <= '\b' || c == '\v' || c == '\f' || c >= '\x0e' && c <= '\x1f' || c == '!' || c == '"' || c == '%' || c == '&' || c >= '(' && c <= '/' || c >= ':' && c <= '@' || c == '[' || c == '^' || c == '`' || c >= '{' && c <= '~':
|
|
goto yystate67
|
|
}
|
|
|
|
yystate67:
|
|
c = l.Next()
|
|
yyrule = 28
|
|
l.Mark()
|
|
goto yyrule28
|
|
|
|
yystate68:
|
|
c = l.Next()
|
|
yyrule = 27
|
|
l.Mark()
|
|
goto yyrule27
|
|
|
|
yystate69:
|
|
c = l.Next()
|
|
yyrule = 27
|
|
l.Mark()
|
|
goto yyrule27
|
|
|
|
yystate70:
|
|
c = l.Next()
|
|
yyrule = 28
|
|
l.Mark()
|
|
switch {
|
|
default:
|
|
goto yyrule28
|
|
case c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z' || c >= '\u007f' && c <= 'ÿ':
|
|
goto yystate71
|
|
}
|
|
|
|
yystate71:
|
|
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 yystate71
|
|
}
|
|
|
|
yystate72:
|
|
c = l.Next()
|
|
yyrule = 23
|
|
l.Mark()
|
|
switch {
|
|
default:
|
|
goto yyrule23
|
|
case c >= '0' && c <= '9':
|
|
goto yystate73
|
|
}
|
|
|
|
yystate73:
|
|
c = l.Next()
|
|
yyrule = 23
|
|
l.Mark()
|
|
switch {
|
|
default:
|
|
goto yyrule23
|
|
case c >= '0' && c <= '9':
|
|
goto yystate73
|
|
}
|
|
|
|
yystate74:
|
|
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 yystate75
|
|
}
|
|
|
|
yystate75:
|
|
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 yystate75
|
|
}
|
|
|
|
yystate76:
|
|
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'
|
|
beginString := func() {
|
|
cnt := 1
|
|
if binPrefix {
|
|
cnt = 2
|
|
}
|
|
|
|
l.ungetN(len(l.TokenBytes(nil)) - cnt)
|
|
tokenBytes := l.TokenBytes(nil)[:cnt]
|
|
fmt.Println(string(tokenBytes)) // TODO: RETURN TOKEN
|
|
begin(STRING)
|
|
}
|
|
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 <= 'ÿ' {
|
|
beginString()
|
|
break F
|
|
}
|
|
l.ungetN(0)
|
|
|
|
case '{':
|
|
c = l.Next()
|
|
if rune(c) == '$' {
|
|
beginString()
|
|
break F
|
|
}
|
|
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: // [ \n\r\t\\'#]
|
|
{
|
|
fmt.Printf("T_ENCAPSED_AND_WHITESPACE: %q\n", l.TokenBytes(nil))
|
|
goto yystate0
|
|
}
|
|
yyrule28: // .
|
|
{
|
|
fmt.Printf("%q\n", l.TokenBytes(nil))
|
|
goto yystate0
|
|
}
|
|
yyrule29: // \${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()
|
|
}
|