Todd 422484af83 formula: add more complex function support
- INDEX
- INDIRECT
- OFFSET
2017-09-17 14:56:58 -05:00

2626 lines
38 KiB
Go

// line 1 "lexer.rl"
// Copyright 2017 Baliance. All rights reserved.
//
// Use of this source code is governed by the terms of the Affero GNU General
// Public License version 3.0 as published by the Free Software Foundation and
// appearing in the file LICENSE included in the packaging of this file. A
// commercial license can be purchased by contacting sales@baliance.com.
package formula
import (
"io"
)
// line 20 "lexer.go"
const formula_start int = 27
const formula_first_final int = 27
const formula_error int = 0
const formula_en_main int = 27
// line 107 "lexer.rl"
func (l *Lexer) lex(r io.Reader) {
cs, p, pe := 0, 0, 0
eof := -1
ts, te, act := 0, 0, 0
_ = act
curline := 1
_ = curline
data := make([]byte, 4096)
done := false
for !done {
// p - index of next character to process
// pe - index of the end of the data
// eof - index of the end of the file
// ts - index of the start of the current token
// te - index of the end of the current token
// still have a partial token
rem := 0
if ts > 0 {
rem = p - ts
}
p = 0
n, err := r.Read(data[rem:])
if n == 0 || err != nil {
done = true
}
pe = n + rem
if pe < len(data) {
eof = pe
}
// line 63 "lexer.go"
{
cs = formula_start
ts = 0
te = 0
act = 0
}
// line 71 "lexer.go"
{
if p == pe {
goto _test_eof
}
switch cs {
case 27:
goto st_case_27
case 1:
goto st_case_1
case 0:
goto st_case_0
case 2:
goto st_case_2
case 28:
goto st_case_28
case 3:
goto st_case_3
case 4:
goto st_case_4
case 5:
goto st_case_5
case 6:
goto st_case_6
case 7:
goto st_case_7
case 8:
goto st_case_8
case 9:
goto st_case_9
case 10:
goto st_case_10
case 11:
goto st_case_11
case 12:
goto st_case_12
case 13:
goto st_case_13
case 14:
goto st_case_14
case 15:
goto st_case_15
case 29:
goto st_case_29
case 16:
goto st_case_16
case 17:
goto st_case_17
case 30:
goto st_case_30
case 18:
goto st_case_18
case 19:
goto st_case_19
case 20:
goto st_case_20
case 31:
goto st_case_31
case 32:
goto st_case_32
case 21:
goto st_case_21
case 33:
goto st_case_33
case 34:
goto st_case_34
case 35:
goto st_case_35
case 22:
goto st_case_22
case 36:
goto st_case_36
case 37:
goto st_case_37
case 38:
goto st_case_38
case 39:
goto st_case_39
case 40:
goto st_case_40
case 23:
goto st_case_23
case 41:
goto st_case_41
case 42:
goto st_case_42
case 43:
goto st_case_43
case 24:
goto st_case_24
case 44:
goto st_case_44
case 45:
goto st_case_45
case 46:
goto st_case_46
case 25:
goto st_case_25
case 26:
goto st_case_26
case 47:
goto st_case_47
case 48:
goto st_case_48
case 49:
goto st_case_49
case 50:
goto st_case_50
case 51:
goto st_case_51
case 52:
goto st_case_52
case 53:
goto st_case_53
case 54:
goto st_case_54
case 55:
goto st_case_55
}
goto st_out
tr0:
// line 1 "NONE"
switch act {
case 0:
{
{
goto st0
}
}
case 1:
{
p = (te) - 1
l.emit(tokenBool, data[ts:te])
}
case 2:
{
p = (te) - 1
l.emit(tokenNumber, data[ts:te])
}
case 3:
{
p = (te) - 1
l.emit(tokenCell, data[ts:te])
}
case 4:
{
p = (te) - 1
l.emit(tokenDDECall, data[ts:te])
}
case 10:
{
p = (te) - 1
l.emit(tokenReservedName, data[ts:te])
}
case 13:
{
p = (te) - 1
l.emit(tokenNamedRange, data[ts:te])
}
case 14:
{
p = (te) - 1
l.emit(tokenString, data[ts+1:te-1])
}
}
goto st27
tr2:
// line 62 "lexer.rl"
te = p + 1
{
l.emit(tokenSheet, data[ts:te-1])
}
goto st27
tr10:
// line 59 "lexer.rl"
te = p + 1
{
l.emit(tokenError, data[ts:te])
}
goto st27
tr15:
// line 60 "lexer.rl"
te = p + 1
{
l.emit(tokenErrorRef, data[ts:te])
}
goto st27
tr25:
// line 63 "lexer.rl"
te = p + 1
{
l.emit(tokenSheet, data[ts+1:te-2])
}
goto st27
tr26:
// line 56 "lexer.rl"
p = (te) - 1
{
l.emit(tokenNumber, data[ts:te])
}
goto st27
tr28:
// line 67 "lexer.rl"
te = p + 1
{
l.emit(tokenFunctionBuiltin, data[ts:te-1])
}
goto st27
tr40:
// line 75 "lexer.rl"
te = p + 1
{
l.emit(tokenAmpersand, data[ts:te])
}
goto st27
tr42:
// line 78 "lexer.rl"
te = p + 1
{
l.emit(tokenLParen, data[ts:te])
}
goto st27
tr43:
// line 79 "lexer.rl"
te = p + 1
{
l.emit(tokenRParen, data[ts:te])
}
goto st27
tr44:
// line 82 "lexer.rl"
te = p + 1
{
l.emit(tokenMult, data[ts:te])
}
goto st27
tr45:
// line 80 "lexer.rl"
te = p + 1
{
l.emit(tokenPlus, data[ts:te])
}
goto st27
tr46:
// line 94 "lexer.rl"
te = p + 1
{
l.emit(tokenComma, data[ts:te])
}
goto st27
tr47:
// line 81 "lexer.rl"
te = p + 1
{
l.emit(tokenMinus, data[ts:te])
}
goto st27
tr48:
// line 83 "lexer.rl"
te = p + 1
{
l.emit(tokenDiv, data[ts:te])
}
goto st27
tr50:
// line 92 "lexer.rl"
te = p + 1
{
l.emit(tokenColon, data[ts:te])
}
goto st27
tr51:
// line 93 "lexer.rl"
te = p + 1
{
l.emit(tokenSemi, data[ts:te])
}
goto st27
tr53:
// line 87 "lexer.rl"
te = p + 1
{
l.emit(tokenEQ, data[ts:te])
}
goto st27
tr59:
// line 84 "lexer.rl"
te = p + 1
{
l.emit(tokenExp, data[ts:te])
}
goto st27
tr61:
// line 76 "lexer.rl"
te = p + 1
{
l.emit(tokenLBrace, data[ts:te])
}
goto st27
tr62:
// line 77 "lexer.rl"
te = p + 1
{
l.emit(tokenRBrace, data[ts:te])
}
goto st27
tr63:
// line 72 "lexer.rl"
te = p
p--
{
l.emit(tokenString, data[ts+1:te-1])
}
goto st27
tr64:
// line 61 "lexer.rl"
te = p
p--
{
l.emit(tokenHorizontalRange, data[ts:te])
}
goto st27
tr65:
// line 57 "lexer.rl"
te = p
p--
{
l.emit(tokenCell, data[ts:te])
}
goto st27
tr66:
// line 56 "lexer.rl"
te = p
p--
{
l.emit(tokenNumber, data[ts:te])
}
goto st27
tr69:
// line 85 "lexer.rl"
te = p
p--
{
l.emit(tokenLT, data[ts:te])
}
goto st27
tr70:
// line 88 "lexer.rl"
te = p + 1
{
l.emit(tokenLEQ, data[ts:te])
}
goto st27
tr71:
// line 90 "lexer.rl"
te = p + 1
{
l.emit(tokenNE, data[ts:te])
}
goto st27
tr72:
// line 86 "lexer.rl"
te = p
p--
{
l.emit(tokenGT, data[ts:te])
}
goto st27
tr73:
// line 89 "lexer.rl"
te = p + 1
{
l.emit(tokenGEQ, data[ts:te])
}
goto st27
tr74:
// line 70 "lexer.rl"
te = p
p--
{
l.emit(tokenNamedRange, data[ts:te])
}
goto st27
tr86:
// line 68 "lexer.rl"
te = p + 1
{
l.emit(tokenFunctionBuiltin, data[ts:te-1])
}
goto st27
st27:
// line 1 "NONE"
ts = 0
// line 1 "NONE"
act = 0
if p++; p == pe {
goto _test_eof27
}
st_case_27:
// line 1 "NONE"
ts = p
// line 431 "lexer.go"
switch data[p] {
case 34:
goto st2
case 35:
goto st3
case 36:
goto st12
case 38:
goto tr40
case 39:
goto st18
case 40:
goto tr42
case 41:
goto tr43
case 42:
goto tr44
case 43:
goto tr45
case 44:
goto tr46
case 45:
goto tr47
case 47:
goto tr48
case 58:
goto tr50
case 59:
goto tr51
case 60:
goto st34
case 61:
goto tr53
case 62:
goto st35
case 63:
goto st0
case 70:
goto st23
case 84:
goto st24
case 92:
goto st25
case 94:
goto tr59
case 95:
goto st26
case 123:
goto tr61
case 125:
goto tr62
}
switch {
case data[p] < 48:
if 33 <= data[p] && data[p] <= 37 {
goto st0
}
case data[p] > 57:
switch {
case data[p] > 90:
if 91 <= data[p] && data[p] <= 93 {
goto st0
}
case data[p] >= 65:
goto st22
}
default:
goto tr49
}
goto st1
st1:
if p++; p == pe {
goto _test_eof1
}
st_case_1:
switch data[p] {
case 33:
goto tr2
case 47:
goto tr0
case 123:
goto tr0
case 125:
goto tr0
}
switch {
case data[p] < 37:
if 34 <= data[p] && data[p] <= 35 {
goto tr0
}
case data[p] > 45:
switch {
case data[p] > 63:
if 91 <= data[p] && data[p] <= 95 {
goto tr0
}
case data[p] >= 58:
goto tr0
}
default:
goto tr0
}
goto st1
st_case_0:
st0:
cs = 0
goto _out
st2:
if p++; p == pe {
goto _test_eof2
}
st_case_2:
if data[p] == 34 {
goto tr4
}
goto st2
tr4:
// line 1 "NONE"
te = p + 1
// line 72 "lexer.rl"
act = 14
goto st28
st28:
if p++; p == pe {
goto _test_eof28
}
st_case_28:
// line 562 "lexer.go"
if data[p] == 34 {
goto st2
}
goto tr63
st3:
if p++; p == pe {
goto _test_eof3
}
st_case_3:
switch data[p] {
case 78:
goto st4
case 82:
goto st9
}
goto st0
st4:
if p++; p == pe {
goto _test_eof4
}
st_case_4:
switch data[p] {
case 47:
goto st5
case 85:
goto st6
}
goto st0
st5:
if p++; p == pe {
goto _test_eof5
}
st_case_5:
if data[p] == 65 {
goto tr10
}
goto st0
st6:
if p++; p == pe {
goto _test_eof6
}
st_case_6:
switch data[p] {
case 76:
goto st7
case 77:
goto st8
}
goto st0
st7:
if p++; p == pe {
goto _test_eof7
}
st_case_7:
if data[p] == 76 {
goto st8
}
goto st0
st8:
if p++; p == pe {
goto _test_eof8
}
st_case_8:
if data[p] == 33 {
goto tr10
}
goto st0
st9:
if p++; p == pe {
goto _test_eof9
}
st_case_9:
if data[p] == 69 {
goto st10
}
goto st0
st10:
if p++; p == pe {
goto _test_eof10
}
st_case_10:
if data[p] == 70 {
goto st11
}
goto st0
st11:
if p++; p == pe {
goto _test_eof11
}
st_case_11:
if data[p] == 33 {
goto tr15
}
goto st0
st12:
if p++; p == pe {
goto _test_eof12
}
st_case_12:
switch data[p] {
case 33:
goto tr2
case 47:
goto st0
case 123:
goto st0
case 125:
goto st0
}
switch {
case data[p] < 48:
switch {
case data[p] > 35:
if 37 <= data[p] && data[p] <= 45 {
goto st0
}
case data[p] >= 34:
goto st0
}
case data[p] > 57:
switch {
case data[p] < 65:
if 58 <= data[p] && data[p] <= 63 {
goto st0
}
case data[p] > 90:
if 91 <= data[p] && data[p] <= 95 {
goto st0
}
default:
goto st16
}
default:
goto st13
}
goto st1
st13:
if p++; p == pe {
goto _test_eof13
}
st_case_13:
switch data[p] {
case 33:
goto tr2
case 47:
goto st0
case 58:
goto st14
case 123:
goto st0
case 125:
goto st0
}
switch {
case data[p] < 48:
switch {
case data[p] > 35:
if 37 <= data[p] && data[p] <= 45 {
goto st0
}
case data[p] >= 34:
goto st0
}
case data[p] > 57:
switch {
case data[p] > 63:
if 91 <= data[p] && data[p] <= 95 {
goto st0
}
case data[p] >= 59:
goto st0
}
default:
goto st13
}
goto st1
st14:
if p++; p == pe {
goto _test_eof14
}
st_case_14:
if data[p] == 36 {
goto st15
}
if 48 <= data[p] && data[p] <= 57 {
goto st29
}
goto tr0
st15:
if p++; p == pe {
goto _test_eof15
}
st_case_15:
if 48 <= data[p] && data[p] <= 57 {
goto st29
}
goto tr0
st29:
if p++; p == pe {
goto _test_eof29
}
st_case_29:
if 48 <= data[p] && data[p] <= 57 {
goto st29
}
goto tr64
st16:
if p++; p == pe {
goto _test_eof16
}
st_case_16:
switch data[p] {
case 33:
goto tr2
case 36:
goto st17
case 47:
goto st0
case 123:
goto st0
case 125:
goto st0
}
switch {
case data[p] < 58:
switch {
case data[p] > 45:
if 48 <= data[p] && data[p] <= 57 {
goto tr22
}
case data[p] >= 34:
goto st0
}
case data[p] > 63:
switch {
case data[p] > 90:
if 91 <= data[p] && data[p] <= 95 {
goto st0
}
case data[p] >= 65:
goto st16
}
default:
goto st0
}
goto st1
st17:
if p++; p == pe {
goto _test_eof17
}
st_case_17:
switch data[p] {
case 33:
goto tr2
case 47:
goto tr0
case 123:
goto tr0
case 125:
goto tr0
}
switch {
case data[p] < 48:
switch {
case data[p] > 35:
if 37 <= data[p] && data[p] <= 45 {
goto tr0
}
case data[p] >= 34:
goto tr0
}
case data[p] > 57:
switch {
case data[p] > 63:
if 91 <= data[p] && data[p] <= 95 {
goto tr0
}
case data[p] >= 58:
goto tr0
}
default:
goto tr22
}
goto st1
tr22:
// line 1 "NONE"
te = p + 1
// line 57 "lexer.rl"
act = 3
goto st30
st30:
if p++; p == pe {
goto _test_eof30
}
st_case_30:
// line 861 "lexer.go"
switch data[p] {
case 33:
goto tr2
case 47:
goto tr65
case 123:
goto tr65
case 125:
goto tr65
}
switch {
case data[p] < 48:
switch {
case data[p] > 35:
if 37 <= data[p] && data[p] <= 45 {
goto tr65
}
case data[p] >= 34:
goto tr65
}
case data[p] > 57:
switch {
case data[p] > 63:
if 91 <= data[p] && data[p] <= 95 {
goto tr65
}
case data[p] >= 58:
goto tr65
}
default:
goto tr22
}
goto st1
st18:
if p++; p == pe {
goto _test_eof18
}
st_case_18:
switch data[p] {
case 39:
goto st0
case 42:
goto st0
case 47:
goto st0
case 58:
goto st0
case 63:
goto st0
}
if 91 <= data[p] && data[p] <= 93 {
goto st0
}
goto st19
st19:
if p++; p == pe {
goto _test_eof19
}
st_case_19:
switch data[p] {
case 39:
goto st20
case 42:
goto st0
case 47:
goto st0
case 58:
goto st0
case 63:
goto st0
}
if 91 <= data[p] && data[p] <= 93 {
goto st0
}
goto st19
st20:
if p++; p == pe {
goto _test_eof20
}
st_case_20:
if data[p] == 33 {
goto tr25
}
goto st0
tr49:
// line 1 "NONE"
te = p + 1
// line 56 "lexer.rl"
act = 2
goto st31
st31:
if p++; p == pe {
goto _test_eof31
}
st_case_31:
// line 960 "lexer.go"
switch data[p] {
case 33:
goto tr2
case 46:
goto tr67
case 58:
goto st14
case 101:
goto st21
case 123:
goto tr66
case 125:
goto tr66
}
switch {
case data[p] < 48:
switch {
case data[p] > 35:
if 37 <= data[p] && data[p] <= 47 {
goto tr66
}
case data[p] >= 34:
goto tr66
}
case data[p] > 57:
switch {
case data[p] > 63:
if 91 <= data[p] && data[p] <= 95 {
goto tr66
}
case data[p] >= 59:
goto tr66
}
default:
goto tr49
}
goto st1
tr67:
// line 1 "NONE"
te = p + 1
// line 56 "lexer.rl"
act = 2
goto st32
st32:
if p++; p == pe {
goto _test_eof32
}
st_case_32:
// line 1012 "lexer.go"
switch data[p] {
case 33:
goto tr2
case 47:
goto tr66
case 101:
goto st21
case 123:
goto tr66
case 125:
goto tr66
}
switch {
case data[p] < 48:
switch {
case data[p] > 35:
if 37 <= data[p] && data[p] <= 45 {
goto tr66
}
case data[p] >= 34:
goto tr66
}
case data[p] > 57:
switch {
case data[p] > 63:
if 91 <= data[p] && data[p] <= 95 {
goto tr66
}
case data[p] >= 58:
goto tr66
}
default:
goto tr67
}
goto st1
st21:
if p++; p == pe {
goto _test_eof21
}
st_case_21:
switch data[p] {
case 33:
goto tr2
case 47:
goto tr26
case 123:
goto tr26
case 125:
goto tr26
}
switch {
case data[p] < 48:
switch {
case data[p] > 35:
if 37 <= data[p] && data[p] <= 45 {
goto tr26
}
case data[p] >= 34:
goto tr26
}
case data[p] > 57:
switch {
case data[p] > 63:
if 91 <= data[p] && data[p] <= 95 {
goto tr26
}
case data[p] >= 58:
goto tr26
}
default:
goto tr27
}
goto st1
tr27:
// line 1 "NONE"
te = p + 1
// line 56 "lexer.rl"
act = 2
goto st33
st33:
if p++; p == pe {
goto _test_eof33
}
st_case_33:
// line 1100 "lexer.go"
switch data[p] {
case 33:
goto tr2
case 47:
goto tr66
case 123:
goto tr66
case 125:
goto tr66
}
switch {
case data[p] < 48:
switch {
case data[p] > 35:
if 37 <= data[p] && data[p] <= 45 {
goto tr66
}
case data[p] >= 34:
goto tr66
}
case data[p] > 57:
switch {
case data[p] > 63:
if 91 <= data[p] && data[p] <= 95 {
goto tr66
}
case data[p] >= 58:
goto tr66
}
default:
goto tr27
}
goto st1
st34:
if p++; p == pe {
goto _test_eof34
}
st_case_34:
switch data[p] {
case 61:
goto tr70
case 62:
goto tr71
}
goto tr69
st35:
if p++; p == pe {
goto _test_eof35
}
st_case_35:
if data[p] == 61 {
goto tr73
}
goto tr72
st22:
if p++; p == pe {
goto _test_eof22
}
st_case_22:
switch data[p] {
case 33:
goto tr2
case 36:
goto st17
case 40:
goto tr28
case 46:
goto tr29
case 92:
goto st37
case 95:
goto st37
case 123:
goto st0
case 125:
goto st0
}
switch {
case data[p] < 58:
switch {
case data[p] > 47:
if 48 <= data[p] && data[p] <= 57 {
goto tr30
}
case data[p] >= 34:
goto st0
}
case data[p] > 63:
switch {
case data[p] < 91:
if 65 <= data[p] && data[p] <= 90 {
goto tr31
}
case data[p] > 94:
if 97 <= data[p] && data[p] <= 122 {
goto tr33
}
default:
goto st0
}
default:
goto st0
}
goto st1
tr29:
// line 1 "NONE"
te = p + 1
// line 70 "lexer.rl"
act = 13
goto st36
st36:
if p++; p == pe {
goto _test_eof36
}
st_case_36:
// line 1219 "lexer.go"
switch data[p] {
case 33:
goto tr2
case 40:
goto tr28
case 46:
goto tr29
case 92:
goto st37
case 95:
goto st37
case 123:
goto tr74
case 125:
goto tr74
}
switch {
case data[p] < 58:
switch {
case data[p] < 37:
if 34 <= data[p] && data[p] <= 35 {
goto tr74
}
case data[p] > 47:
if 48 <= data[p] && data[p] <= 57 {
goto tr29
}
default:
goto tr74
}
case data[p] > 63:
switch {
case data[p] < 91:
if 65 <= data[p] && data[p] <= 90 {
goto tr29
}
case data[p] > 94:
if 97 <= data[p] && data[p] <= 122 {
goto tr33
}
default:
goto tr74
}
default:
goto tr74
}
goto st1
st37:
if p++; p == pe {
goto _test_eof37
}
st_case_37:
switch data[p] {
case 46:
goto st37
case 92:
goto st37
case 95:
goto st37
}
switch {
case data[p] < 65:
if 48 <= data[p] && data[p] <= 57 {
goto st37
}
case data[p] > 90:
if 97 <= data[p] && data[p] <= 122 {
goto st37
}
default:
goto st37
}
goto tr74
tr33:
// line 1 "NONE"
te = p + 1
// line 70 "lexer.rl"
act = 13
goto st38
st38:
if p++; p == pe {
goto _test_eof38
}
st_case_38:
// line 1307 "lexer.go"
switch data[p] {
case 33:
goto tr2
case 46:
goto tr33
case 92:
goto st37
case 95:
goto st37
case 123:
goto tr74
case 125:
goto tr74
}
switch {
case data[p] < 58:
switch {
case data[p] < 37:
if 34 <= data[p] && data[p] <= 35 {
goto tr74
}
case data[p] > 47:
if 48 <= data[p] && data[p] <= 57 {
goto tr33
}
default:
goto tr74
}
case data[p] > 63:
switch {
case data[p] < 91:
if 65 <= data[p] && data[p] <= 90 {
goto tr33
}
case data[p] > 94:
if 97 <= data[p] && data[p] <= 122 {
goto tr33
}
default:
goto tr74
}
default:
goto tr74
}
goto st1
tr30:
// line 1 "NONE"
te = p + 1
// line 57 "lexer.rl"
act = 3
goto st39
st39:
if p++; p == pe {
goto _test_eof39
}
st_case_39:
// line 1367 "lexer.go"
switch data[p] {
case 33:
goto tr2
case 40:
goto tr28
case 46:
goto tr29
case 92:
goto st37
case 95:
goto st37
case 123:
goto tr65
case 125:
goto tr65
}
switch {
case data[p] < 58:
switch {
case data[p] < 37:
if 34 <= data[p] && data[p] <= 35 {
goto tr65
}
case data[p] > 47:
if 48 <= data[p] && data[p] <= 57 {
goto tr30
}
default:
goto tr65
}
case data[p] > 63:
switch {
case data[p] < 91:
if 65 <= data[p] && data[p] <= 90 {
goto tr29
}
case data[p] > 94:
if 97 <= data[p] && data[p] <= 122 {
goto tr33
}
default:
goto tr65
}
default:
goto tr65
}
goto st1
tr31:
// line 1 "NONE"
te = p + 1
// line 70 "lexer.rl"
act = 13
goto st40
tr77:
// line 1 "NONE"
te = p + 1
// line 55 "lexer.rl"
act = 1
goto st40
tr79:
// line 1 "NONE"
te = p + 1
// line 58 "lexer.rl"
act = 4
goto st40
st40:
if p++; p == pe {
goto _test_eof40
}
st_case_40:
// line 1447 "lexer.go"
switch data[p] {
case 33:
goto tr2
case 36:
goto st17
case 40:
goto tr28
case 46:
goto tr29
case 92:
goto st37
case 95:
goto st37
case 123:
goto tr0
case 125:
goto tr0
}
switch {
case data[p] < 58:
switch {
case data[p] > 47:
if 48 <= data[p] && data[p] <= 57 {
goto tr30
}
case data[p] >= 34:
goto tr0
}
case data[p] > 63:
switch {
case data[p] < 91:
if 65 <= data[p] && data[p] <= 90 {
goto tr31
}
case data[p] > 94:
if 97 <= data[p] && data[p] <= 122 {
goto tr33
}
default:
goto tr0
}
default:
goto tr0
}
goto st1
st23:
if p++; p == pe {
goto _test_eof23
}
st_case_23:
switch data[p] {
case 33:
goto tr2
case 36:
goto st17
case 40:
goto tr28
case 46:
goto tr29
case 65:
goto tr34
case 92:
goto st37
case 95:
goto st37
case 123:
goto st0
case 125:
goto st0
}
switch {
case data[p] < 58:
switch {
case data[p] > 47:
if 48 <= data[p] && data[p] <= 57 {
goto tr30
}
case data[p] >= 34:
goto st0
}
case data[p] > 63:
switch {
case data[p] < 91:
if 66 <= data[p] && data[p] <= 90 {
goto tr31
}
case data[p] > 94:
if 97 <= data[p] && data[p] <= 122 {
goto tr33
}
default:
goto st0
}
default:
goto st0
}
goto st1
tr34:
// line 1 "NONE"
te = p + 1
// line 70 "lexer.rl"
act = 13
goto st41
st41:
if p++; p == pe {
goto _test_eof41
}
st_case_41:
// line 1559 "lexer.go"
switch data[p] {
case 33:
goto tr2
case 36:
goto st17
case 40:
goto tr28
case 46:
goto tr29
case 76:
goto tr75
case 92:
goto st37
case 95:
goto st37
case 123:
goto tr74
case 125:
goto tr74
}
switch {
case data[p] < 58:
switch {
case data[p] > 47:
if 48 <= data[p] && data[p] <= 57 {
goto tr30
}
case data[p] >= 34:
goto tr74
}
case data[p] > 63:
switch {
case data[p] < 91:
if 65 <= data[p] && data[p] <= 90 {
goto tr31
}
case data[p] > 94:
if 97 <= data[p] && data[p] <= 122 {
goto tr33
}
default:
goto tr74
}
default:
goto tr74
}
goto st1
tr75:
// line 1 "NONE"
te = p + 1
// line 70 "lexer.rl"
act = 13
goto st42
st42:
if p++; p == pe {
goto _test_eof42
}
st_case_42:
// line 1621 "lexer.go"
switch data[p] {
case 33:
goto tr2
case 36:
goto st17
case 40:
goto tr28
case 46:
goto tr29
case 83:
goto tr76
case 92:
goto st37
case 95:
goto st37
case 123:
goto tr74
case 125:
goto tr74
}
switch {
case data[p] < 58:
switch {
case data[p] > 47:
if 48 <= data[p] && data[p] <= 57 {
goto tr30
}
case data[p] >= 34:
goto tr74
}
case data[p] > 63:
switch {
case data[p] < 91:
if 65 <= data[p] && data[p] <= 90 {
goto tr31
}
case data[p] > 94:
if 97 <= data[p] && data[p] <= 122 {
goto tr33
}
default:
goto tr74
}
default:
goto tr74
}
goto st1
tr76:
// line 1 "NONE"
te = p + 1
// line 70 "lexer.rl"
act = 13
goto st43
st43:
if p++; p == pe {
goto _test_eof43
}
st_case_43:
// line 1683 "lexer.go"
switch data[p] {
case 33:
goto tr2
case 36:
goto st17
case 40:
goto tr28
case 46:
goto tr29
case 69:
goto tr77
case 92:
goto st37
case 95:
goto st37
case 123:
goto tr74
case 125:
goto tr74
}
switch {
case data[p] < 58:
switch {
case data[p] > 47:
if 48 <= data[p] && data[p] <= 57 {
goto tr30
}
case data[p] >= 34:
goto tr74
}
case data[p] > 63:
switch {
case data[p] < 91:
if 65 <= data[p] && data[p] <= 90 {
goto tr31
}
case data[p] > 94:
if 97 <= data[p] && data[p] <= 122 {
goto tr33
}
default:
goto tr74
}
default:
goto tr74
}
goto st1
st24:
if p++; p == pe {
goto _test_eof24
}
st_case_24:
switch data[p] {
case 33:
goto tr2
case 36:
goto st17
case 40:
goto tr28
case 46:
goto tr29
case 79:
goto tr35
case 82:
goto tr36
case 92:
goto st37
case 95:
goto st37
case 123:
goto st0
case 125:
goto st0
}
switch {
case data[p] < 58:
switch {
case data[p] > 47:
if 48 <= data[p] && data[p] <= 57 {
goto tr30
}
case data[p] >= 34:
goto st0
}
case data[p] > 63:
switch {
case data[p] < 91:
if 65 <= data[p] && data[p] <= 90 {
goto tr31
}
case data[p] > 94:
if 97 <= data[p] && data[p] <= 122 {
goto tr33
}
default:
goto st0
}
default:
goto st0
}
goto st1
tr35:
// line 1 "NONE"
te = p + 1
// line 70 "lexer.rl"
act = 13
goto st44
st44:
if p++; p == pe {
goto _test_eof44
}
st_case_44:
// line 1799 "lexer.go"
switch data[p] {
case 33:
goto tr2
case 36:
goto st17
case 40:
goto tr28
case 46:
goto tr29
case 68:
goto tr78
case 92:
goto st37
case 95:
goto st37
case 123:
goto tr74
case 125:
goto tr74
}
switch {
case data[p] < 58:
switch {
case data[p] > 47:
if 48 <= data[p] && data[p] <= 57 {
goto tr30
}
case data[p] >= 34:
goto tr74
}
case data[p] > 63:
switch {
case data[p] < 91:
if 65 <= data[p] && data[p] <= 90 {
goto tr31
}
case data[p] > 94:
if 97 <= data[p] && data[p] <= 122 {
goto tr33
}
default:
goto tr74
}
default:
goto tr74
}
goto st1
tr78:
// line 1 "NONE"
te = p + 1
// line 70 "lexer.rl"
act = 13
goto st45
st45:
if p++; p == pe {
goto _test_eof45
}
st_case_45:
// line 1861 "lexer.go"
switch data[p] {
case 33:
goto tr2
case 36:
goto st17
case 40:
goto tr28
case 46:
goto tr29
case 79:
goto tr79
case 92:
goto st37
case 95:
goto st37
case 123:
goto tr74
case 125:
goto tr74
}
switch {
case data[p] < 58:
switch {
case data[p] > 47:
if 48 <= data[p] && data[p] <= 57 {
goto tr30
}
case data[p] >= 34:
goto tr74
}
case data[p] > 63:
switch {
case data[p] < 91:
if 65 <= data[p] && data[p] <= 90 {
goto tr31
}
case data[p] > 94:
if 97 <= data[p] && data[p] <= 122 {
goto tr33
}
default:
goto tr74
}
default:
goto tr74
}
goto st1
tr36:
// line 1 "NONE"
te = p + 1
// line 70 "lexer.rl"
act = 13
goto st46
st46:
if p++; p == pe {
goto _test_eof46
}
st_case_46:
// line 1923 "lexer.go"
switch data[p] {
case 33:
goto tr2
case 36:
goto st17
case 40:
goto tr28
case 46:
goto tr29
case 85:
goto tr76
case 92:
goto st37
case 95:
goto st37
case 123:
goto tr74
case 125:
goto tr74
}
switch {
case data[p] < 58:
switch {
case data[p] > 47:
if 48 <= data[p] && data[p] <= 57 {
goto tr30
}
case data[p] >= 34:
goto tr74
}
case data[p] > 63:
switch {
case data[p] < 91:
if 65 <= data[p] && data[p] <= 90 {
goto tr31
}
case data[p] > 94:
if 97 <= data[p] && data[p] <= 122 {
goto tr33
}
default:
goto tr74
}
default:
goto tr74
}
goto st1
st25:
if p++; p == pe {
goto _test_eof25
}
st_case_25:
switch data[p] {
case 46:
goto st37
case 92:
goto st37
case 95:
goto st37
}
switch {
case data[p] < 65:
if 48 <= data[p] && data[p] <= 57 {
goto st37
}
case data[p] > 90:
if 97 <= data[p] && data[p] <= 122 {
goto st37
}
default:
goto st37
}
goto st0
st26:
if p++; p == pe {
goto _test_eof26
}
st_case_26:
switch data[p] {
case 46:
goto st37
case 92:
goto st37
case 95:
goto st37
case 120:
goto st47
}
switch {
case data[p] < 65:
if 48 <= data[p] && data[p] <= 57 {
goto st37
}
case data[p] > 90:
if 97 <= data[p] && data[p] <= 122 {
goto st37
}
default:
goto st37
}
goto st0
st47:
if p++; p == pe {
goto _test_eof47
}
st_case_47:
switch data[p] {
case 46:
goto st37
case 92:
goto st37
case 95:
goto st37
case 108:
goto st48
}
switch {
case data[p] < 65:
if 48 <= data[p] && data[p] <= 57 {
goto st37
}
case data[p] > 90:
if 97 <= data[p] && data[p] <= 122 {
goto st37
}
default:
goto st37
}
goto tr74
st48:
if p++; p == pe {
goto _test_eof48
}
st_case_48:
switch data[p] {
case 46:
goto st37
case 92:
goto st37
case 95:
goto st37
case 102:
goto st49
case 110:
goto st53
}
switch {
case data[p] < 65:
if 48 <= data[p] && data[p] <= 57 {
goto st37
}
case data[p] > 90:
if 97 <= data[p] && data[p] <= 122 {
goto st37
}
default:
goto st37
}
goto tr74
st49:
if p++; p == pe {
goto _test_eof49
}
st_case_49:
switch data[p] {
case 46:
goto st37
case 92:
goto st37
case 95:
goto st37
case 110:
goto st50
}
switch {
case data[p] < 65:
if 48 <= data[p] && data[p] <= 57 {
goto st37
}
case data[p] > 90:
if 97 <= data[p] && data[p] <= 122 {
goto st37
}
default:
goto st37
}
goto tr74
st50:
if p++; p == pe {
goto _test_eof50
}
st_case_50:
switch data[p] {
case 46:
goto st51
case 92:
goto st37
case 95:
goto st37
}
switch {
case data[p] < 65:
if 48 <= data[p] && data[p] <= 57 {
goto st37
}
case data[p] > 90:
if 97 <= data[p] && data[p] <= 122 {
goto st37
}
default:
goto st37
}
goto tr74
st51:
if p++; p == pe {
goto _test_eof51
}
st_case_51:
switch data[p] {
case 46:
goto st37
case 92:
goto st37
case 95:
goto st52
}
switch {
case data[p] < 65:
if 48 <= data[p] && data[p] <= 57 {
goto st37
}
case data[p] > 90:
if 97 <= data[p] && data[p] <= 122 {
goto st37
}
default:
goto st52
}
goto tr74
st52:
if p++; p == pe {
goto _test_eof52
}
st_case_52:
switch data[p] {
case 40:
goto tr86
case 46:
goto st52
case 92:
goto st37
case 95:
goto st37
}
switch {
case data[p] < 65:
if 48 <= data[p] && data[p] <= 57 {
goto st52
}
case data[p] > 90:
if 97 <= data[p] && data[p] <= 122 {
goto st37
}
default:
goto st52
}
goto tr74
st53:
if p++; p == pe {
goto _test_eof53
}
st_case_53:
switch data[p] {
case 46:
goto st37
case 92:
goto st37
case 95:
goto st37
case 109:
goto st54
}
switch {
case data[p] < 65:
if 48 <= data[p] && data[p] <= 57 {
goto st37
}
case data[p] > 90:
if 97 <= data[p] && data[p] <= 122 {
goto st37
}
default:
goto st37
}
goto tr74
st54:
if p++; p == pe {
goto _test_eof54
}
st_case_54:
switch data[p] {
case 46:
goto tr88
case 92:
goto st37
case 95:
goto st37
}
switch {
case data[p] < 65:
if 48 <= data[p] && data[p] <= 57 {
goto st37
}
case data[p] > 90:
if 97 <= data[p] && data[p] <= 122 {
goto st37
}
default:
goto st37
}
goto tr74
tr88:
// line 1 "NONE"
te = p + 1
// line 70 "lexer.rl"
act = 13
goto st55
tr89:
// line 1 "NONE"
te = p + 1
// line 64 "lexer.rl"
act = 10
goto st55
st55:
if p++; p == pe {
goto _test_eof55
}
st_case_55:
// line 2268 "lexer.go"
switch data[p] {
case 46:
goto st37
case 92:
goto st37
case 95:
goto tr89
}
switch {
case data[p] < 65:
if 48 <= data[p] && data[p] <= 57 {
goto st37
}
case data[p] > 90:
if 97 <= data[p] && data[p] <= 122 {
goto st37
}
default:
goto tr89
}
goto tr0
st_out:
_test_eof27:
cs = 27
goto _test_eof
_test_eof1:
cs = 1
goto _test_eof
_test_eof2:
cs = 2
goto _test_eof
_test_eof28:
cs = 28
goto _test_eof
_test_eof3:
cs = 3
goto _test_eof
_test_eof4:
cs = 4
goto _test_eof
_test_eof5:
cs = 5
goto _test_eof
_test_eof6:
cs = 6
goto _test_eof
_test_eof7:
cs = 7
goto _test_eof
_test_eof8:
cs = 8
goto _test_eof
_test_eof9:
cs = 9
goto _test_eof
_test_eof10:
cs = 10
goto _test_eof
_test_eof11:
cs = 11
goto _test_eof
_test_eof12:
cs = 12
goto _test_eof
_test_eof13:
cs = 13
goto _test_eof
_test_eof14:
cs = 14
goto _test_eof
_test_eof15:
cs = 15
goto _test_eof
_test_eof29:
cs = 29
goto _test_eof
_test_eof16:
cs = 16
goto _test_eof
_test_eof17:
cs = 17
goto _test_eof
_test_eof30:
cs = 30
goto _test_eof
_test_eof18:
cs = 18
goto _test_eof
_test_eof19:
cs = 19
goto _test_eof
_test_eof20:
cs = 20
goto _test_eof
_test_eof31:
cs = 31
goto _test_eof
_test_eof32:
cs = 32
goto _test_eof
_test_eof21:
cs = 21
goto _test_eof
_test_eof33:
cs = 33
goto _test_eof
_test_eof34:
cs = 34
goto _test_eof
_test_eof35:
cs = 35
goto _test_eof
_test_eof22:
cs = 22
goto _test_eof
_test_eof36:
cs = 36
goto _test_eof
_test_eof37:
cs = 37
goto _test_eof
_test_eof38:
cs = 38
goto _test_eof
_test_eof39:
cs = 39
goto _test_eof
_test_eof40:
cs = 40
goto _test_eof
_test_eof23:
cs = 23
goto _test_eof
_test_eof41:
cs = 41
goto _test_eof
_test_eof42:
cs = 42
goto _test_eof
_test_eof43:
cs = 43
goto _test_eof
_test_eof24:
cs = 24
goto _test_eof
_test_eof44:
cs = 44
goto _test_eof
_test_eof45:
cs = 45
goto _test_eof
_test_eof46:
cs = 46
goto _test_eof
_test_eof25:
cs = 25
goto _test_eof
_test_eof26:
cs = 26
goto _test_eof
_test_eof47:
cs = 47
goto _test_eof
_test_eof48:
cs = 48
goto _test_eof
_test_eof49:
cs = 49
goto _test_eof
_test_eof50:
cs = 50
goto _test_eof
_test_eof51:
cs = 51
goto _test_eof
_test_eof52:
cs = 52
goto _test_eof
_test_eof53:
cs = 53
goto _test_eof
_test_eof54:
cs = 54
goto _test_eof
_test_eof55:
cs = 55
goto _test_eof
_test_eof:
{
}
if p == eof {
switch cs {
case 1:
goto tr0
case 2:
goto tr0
case 28:
goto tr63
case 14:
goto tr0
case 15:
goto tr0
case 29:
goto tr64
case 17:
goto tr0
case 30:
goto tr65
case 31:
goto tr66
case 32:
goto tr66
case 21:
goto tr26
case 33:
goto tr66
case 34:
goto tr69
case 35:
goto tr72
case 36:
goto tr74
case 37:
goto tr74
case 38:
goto tr74
case 39:
goto tr65
case 40:
goto tr0
case 41:
goto tr74
case 42:
goto tr74
case 43:
goto tr74
case 44:
goto tr74
case 45:
goto tr74
case 46:
goto tr74
case 47:
goto tr74
case 48:
goto tr74
case 49:
goto tr74
case 50:
goto tr74
case 51:
goto tr74
case 52:
goto tr74
case 53:
goto tr74
case 54:
goto tr74
case 55:
goto tr0
}
}
_out:
{
}
}
// line 143 "lexer.rl"
if ts > 0 {
// currently parsing a token, so shift it to the
// beginning of the buffer
copy(data[0:], data[ts:])
}
}
_ = eof
if cs == formula_error {
l.emit(tokenLexError, nil)
}
close(l.nodes)
}