aboutsummaryrefslogtreecommitdiff
path: root/internal/parser/parser.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/parser/parser.go')
-rw-r--r--internal/parser/parser.go1803
1 files changed, 0 insertions, 1803 deletions
diff --git a/internal/parser/parser.go b/internal/parser/parser.go
deleted file mode 100644
index 171878d..0000000
--- a/internal/parser/parser.go
+++ /dev/null
@@ -1,1803 +0,0 @@
-// Code generated by 'egg -o ./internal/parser/parser.go -package parser -start Config config.ebnf', DO NOT EDIT.
-
-// Parser generated from config.ebnf.
-
-package parser
-
-import (
- "errors"
- "fmt"
- "go/token"
- "strconv"
- "unicode"
- "unicode/utf8"
-
- "modernc.org/scanner"
-)
-
-var _ = unicode.MaxRune
-
-// Symbols
-const (
- TOK_EOF = Symbol(0) // EOF
- TOK_003d = Symbol(1) // '='
- boolean = Symbol(2) // boolean
- br = Symbol(3) // br
- lbrace = Symbol(4) // lbrace
- number = Symbol(5) // number
- rbrace = Symbol(6) // rbrace
- str = Symbol(7) // str
- white_space = Symbol(8) // white_space
- word = Symbol(9) // word
- Config = Symbol(10) // Config
- Doc = Symbol(11) // Doc
- Stmt = Symbol(12) // Stmt
- Assignment = Symbol(13) // Assignment
- Command = Symbol(14) // Command
- Values = Symbol(15) // Values
- Value = Symbol(16) // Value
- Body = Symbol(17) // Body
- Word = Symbol(18) // Word
- Number = Symbol(19) // Number
- Boolean = Symbol(20) // Boolean
- String = Symbol(21) // String
-)
-
-const SymbolNames = "EOF'='booleanbrlbracenumberrbracestrwhite_spacewordConfigDocStmtAssignmentCommandValuesValueBodyWordNumberBooleanString"
-
-var SymbolIndex = [...]uint8{0, 3, 6, 13, 15, 21, 27, 33, 36, 47, 51, 57, 60, 64, 74, 81, 87, 92, 96, 100, 106, 113, 119}
-
-func (s Symbol) String() string {
- idx := int(s) - 0
- if s < 0 || idx >= len(SymbolIndex)-1 {
- return "Symbol(" + strconv.FormatInt(int64(s), 10) + ")"
- }
- return SymbolNames[SymbolIndex[idx]:SymbolIndex[idx+1]]
-}
-
-var errorSets = [...][]Symbol{
- {String, Boolean, Number, Word, Body, Value, Values, word, str, number, lbrace, br, boolean, TOK_003d},
- {TOK_003d},
- {String, Boolean, Number, Word, Value, word, str, number, lbrace, br, boolean},
- {String, Boolean, Number, Word, Value, word, str, number, boolean},
- {String, Boolean, Number, Word, word, str, number, boolean},
- {word, str, number, boolean},
- {boolean},
- {lbrace, br},
- {br},
- {lbrace},
- {number},
- {Word, Stmt, word, rbrace},
- {rbrace},
- {str},
- {Word, Stmt, word},
- {Word, word},
- {word},
-}
-
-type Parser struct {
- cache [][]int32
- eof bool
- errBudget int
- id rune // from scanSep, valid if .n != 0
- n int // from scanSep, valid if != 0
- off int
- sc *scanner.RecScanner
- src []byte
- tok scanner.Token // current lookahead
- tokIndex int32 // For scanner.Token(tokIndex)
-}
-
-type Symbol int32
-
-// scan recognizes longest UTF-8 lexemes. Lower IDs take precedence on same length.
-//
-// id 0: $
-// id 1: =
-// id 2: (true|false)
-// id 3: (;)
-// id 4: (\{)
-// id 5: (-?[0-9]+(\.[0-9]+)?)
-// id 6: (\})
-// id 7: (("[^"]*")|('[^']*')|(`)(([^\x60]))*(`))
-// id 8: ( |\t|\r|\n|#.*)
-// id 9: (((([a-zA-Z]))|((\$|_|-))))(((([a-zA-Z]))|((-?[0-9]+(\.[0-9]+)?))|((\$|_|-))))*
-//
-// ID == -1 is returned when no lexeme was recognized.
-func (*Parser) scan(s []byte) (id, length int) {
- const endOfText = 0x110000
- var pos, pos0, width, width1 int
- id = -1
- var r, r1 rune
- _ = pos0
- _ = r
- _ = r1
- _ = width1
- step := func(pos int) (r rune, n int) {
- if pos < len(s) {
- c := s[pos]
- if c < utf8.RuneSelf {
- return rune(c), 1
- }
- return utf8.DecodeRune(s[pos:])
- }
- return endOfText, 0
- }
- move := func() {
- pos += width
- if r, width = r1, width1; r != endOfText {
- r1, width1 = step(pos + width)
- }
- }
- accept := func(x rune) bool {
- if r == x {
- move()
- return true
- }
- return false
- }
- _ = accept
- accept2 := func(x rune) bool {
- if r <= x {
- move()
- return true
- }
- return false
- }
- _ = accept2
- r, r1 = endOfText, endOfText
- width, width1 = 0, 0
- r, width = step(pos)
- if r != endOfText {
- r1, width1 = step(pos + width)
- }
- if accept('\t') {
- goto l41
- }
- if accept('\n') {
- goto l43
- }
- if accept('\r') {
- goto l45
- }
- if accept(' ') {
- goto l47
- }
- if accept('"') {
- goto l49
- }
- if accept('#') {
- goto l61
- }
- if accept('$') {
- goto l69
- }
- if accept('\'') {
- goto l172
- }
- if accept('-') {
- goto l184
- }
- if accept(';') {
- goto l252
- }
- if accept('=') {
- goto l254
- }
- if accept('_') {
- goto l268
- }
- if accept('`') {
- goto l280
- }
- if accept('f') {
- goto l292
- }
- if accept('t') {
- goto l360
- }
- if accept('{') {
- goto l414
- }
- if accept('}') {
- goto l416
- }
- if r < '0' {
- goto l34out
- }
- if accept2('9') {
- goto l239
- }
-l34out:
- if r < 'A' {
- goto l36out
- }
- if accept2('Z') {
- goto l256
- }
- if r < 'a' {
- goto l36out
- }
- if accept2('e') {
- goto l256
- }
- if r < 'g' {
- goto l36out
- }
- if accept2('s') {
- goto l256
- }
- if r < 'u' {
- goto l36out
- }
- if accept2('z') {
- goto l256
- }
-l36out:
- if r == endOfText {
- goto l418
- }
- return id, length
-l41:
- id, length = 8, pos
- return id, length
-l43:
- id, length = 8, pos
- return id, length
-l45:
- id, length = 8, pos
- return id, length
-l47:
- id, length = 8, pos
- return id, length
-l49:
- if accept('"') {
- goto l54
- }
- if accept2('!') {
- goto l56
- }
- if r < '#' {
- goto l51out
- }
- if accept2('\U0010ffff') {
- goto l56
- }
-l51out:
- return id, length
-l54:
- id, length = 7, pos
- return id, length
-l56:
- if accept('"') {
- goto l54
- }
- if accept2('!') {
- goto l56
- }
- if r < '#' {
- goto l58out
- }
- if accept2('\U0010ffff') {
- goto l56
- }
-l58out:
- return id, length
-l61:
- id, length = 8, pos
- if accept2('\t') {
- goto l65
- }
- if r < '\v' {
- goto l62out
- }
- if accept2('\U0010ffff') {
- goto l65
- }
-l62out:
- return id, length
-l65:
- id, length = 8, pos
- if accept2('\t') {
- goto l65
- }
- if r < '\v' {
- goto l66out
- }
- if accept2('\U0010ffff') {
- goto l65
- }
-l66out:
- return id, length
-l69:
- id, length = 9, pos
- if accept('$') {
- goto l81
- }
- if accept('-') {
- goto l93
- }
- if accept('_') {
- goto l160
- }
- if r < '0' {
- goto l76out
- }
- if accept2('9') {
- goto l105
- }
-l76out:
- if r < 'A' {
- goto l78out
- }
- if accept2('Z') {
- goto l148
- }
- if r < 'a' {
- goto l78out
- }
- if accept2('z') {
- goto l148
- }
-l78out:
- return id, length
-l81:
- id, length = 9, pos
- if accept('$') {
- goto l81
- }
- if accept('-') {
- goto l93
- }
- if accept('_') {
- goto l160
- }
- if r < '0' {
- goto l88out
- }
- if accept2('9') {
- goto l105
- }
-l88out:
- if r < 'A' {
- goto l90out
- }
- if accept2('Z') {
- goto l148
- }
- if r < 'a' {
- goto l90out
- }
- if accept2('z') {
- goto l148
- }
-l90out:
- return id, length
-l93:
- id, length = 9, pos
- if accept('$') {
- goto l81
- }
- if accept('-') {
- goto l93
- }
- if accept('_') {
- goto l160
- }
- if r < '0' {
- goto l100out
- }
- if accept2('9') {
- goto l105
- }
-l100out:
- if r < 'A' {
- goto l102out
- }
- if accept2('Z') {
- goto l148
- }
- if r < 'a' {
- goto l102out
- }
- if accept2('z') {
- goto l148
- }
-l102out:
- return id, length
-l105:
- id, length = 9, pos
- if accept('$') {
- goto l81
- }
- if accept('-') {
- goto l93
- }
- if accept('.') {
- goto l119
- }
- if accept('_') {
- goto l160
- }
- if r < '0' {
- goto l114out
- }
- if accept2('9') {
- goto l105
- }
-l114out:
- if r < 'A' {
- goto l116out
- }
- if accept2('Z') {
- goto l148
- }
- if r < 'a' {
- goto l116out
- }
- if accept2('z') {
- goto l148
- }
-l116out:
- return id, length
-l119:
- if r < '0' {
- goto l119out
- }
- if accept2('9') {
- goto l122
- }
-l119out:
- return id, length
-l122:
- id, length = 9, pos
- if accept('$') {
- goto l81
- }
- if accept('-') {
- goto l93
- }
- if accept('_') {
- goto l160
- }
- if r < '0' {
- goto l129out
- }
- if accept2('9') {
- goto l134
- }
-l129out:
- if r < 'A' {
- goto l131out
- }
- if accept2('Z') {
- goto l148
- }
- if r < 'a' {
- goto l131out
- }
- if accept2('z') {
- goto l148
- }
-l131out:
- return id, length
-l134:
- id, length = 9, pos
- if accept('$') {
- goto l81
- }
- if accept('-') {
- goto l93
- }
- if accept('.') {
- goto l119
- }
- if accept('_') {
- goto l160
- }
- if r < '0' {
- goto l143out
- }
- if accept2('9') {
- goto l134
- }
-l143out:
- if r < 'A' {
- goto l145out
- }
- if accept2('Z') {
- goto l148
- }
- if r < 'a' {
- goto l145out
- }
- if accept2('z') {
- goto l148
- }
-l145out:
- return id, length
-l148:
- id, length = 9, pos
- if accept('$') {
- goto l81
- }
- if accept('-') {
- goto l93
- }
- if accept('_') {
- goto l160
- }
- if r < '0' {
- goto l155out
- }
- if accept2('9') {
- goto l105
- }
-l155out:
- if r < 'A' {
- goto l157out
- }
- if accept2('Z') {
- goto l148
- }
- if r < 'a' {
- goto l157out
- }
- if accept2('z') {
- goto l148
- }
-l157out:
- return id, length
-l160:
- id, length = 9, pos
- if accept('$') {
- goto l81
- }
- if accept('-') {
- goto l93
- }
- if accept('_') {
- goto l160
- }
- if r < '0' {
- goto l167out
- }
- if accept2('9') {
- goto l105
- }
-l167out:
- if r < 'A' {
- goto l169out
- }
- if accept2('Z') {
- goto l148
- }
- if r < 'a' {
- goto l169out
- }
- if accept2('z') {
- goto l148
- }
-l169out:
- return id, length
-l172:
- if accept('\'') {
- goto l177
- }
- if accept2('&') {
- goto l179
- }
- if r < '(' {
- goto l174out
- }
- if accept2('\U0010ffff') {
- goto l179
- }
-l174out:
- return id, length
-l177:
- id, length = 7, pos
- return id, length
-l179:
- if accept('\'') {
- goto l177
- }
- if accept2('&') {
- goto l179
- }
- if r < '(' {
- goto l181out
- }
- if accept2('\U0010ffff') {
- goto l179
- }
-l181out:
- return id, length
-l184:
- id, length = 9, pos
- if accept('$') {
- goto l81
- }
- if accept('-') {
- goto l93
- }
- if accept('_') {
- goto l160
- }
- if r < '0' {
- goto l191out
- }
- if accept2('9') {
- goto l196
- }
-l191out:
- if r < 'A' {
- goto l193out
- }
- if accept2('Z') {
- goto l148
- }
- if r < 'a' {
- goto l193out
- }
- if accept2('z') {
- goto l148
- }
-l193out:
- return id, length
-l196:
- id, length = 5, pos
- if accept('$') {
- goto l81
- }
- if accept('-') {
- goto l93
- }
- if accept('.') {
- goto l210
- }
- if accept('_') {
- goto l160
- }
- if r < '0' {
- goto l205out
- }
- if accept2('9') {
- goto l196
- }
-l205out:
- if r < 'A' {
- goto l207out
- }
- if accept2('Z') {
- goto l148
- }
- if r < 'a' {
- goto l207out
- }
- if accept2('z') {
- goto l148
- }
-l207out:
- return id, length
-l210:
- if r < '0' {
- goto l210out
- }
- if accept2('9') {
- goto l213
- }
-l210out:
- return id, length
-l213:
- id, length = 5, pos
- if accept('$') {
- goto l81
- }
- if accept('-') {
- goto l93
- }
- if accept('_') {
- goto l160
- }
- if r < '0' {
- goto l220out
- }
- if accept2('9') {
- goto l225
- }
-l220out:
- if r < 'A' {
- goto l222out
- }
- if accept2('Z') {
- goto l148
- }
- if r < 'a' {
- goto l222out
- }
- if accept2('z') {
- goto l148
- }
-l222out:
- return id, length
-l225:
- id, length = 5, pos
- if accept('$') {
- goto l81
- }
- if accept('-') {
- goto l93
- }
- if accept('.') {
- goto l119
- }
- if accept('_') {
- goto l160
- }
- if r < '0' {
- goto l234out
- }
- if accept2('9') {
- goto l225
- }
-l234out:
- if r < 'A' {
- goto l236out
- }
- if accept2('Z') {
- goto l148
- }
- if r < 'a' {
- goto l236out
- }
- if accept2('z') {
- goto l148
- }
-l236out:
- return id, length
-l239:
- id, length = 5, pos
- if accept('.') {
- goto l245
- }
- if r < '0' {
- goto l242out
- }
- if accept2('9') {
- goto l239
- }
-l242out:
- return id, length
-l245:
- if r < '0' {
- goto l245out
- }
- if accept2('9') {
- goto l248
- }
-l245out:
- return id, length
-l248:
- id, length = 5, pos
- if r < '0' {
- goto l249out
- }
- if accept2('9') {
- goto l248
- }
-l249out:
- return id, length
-l252:
- id, length = 3, pos
- return id, length
-l254:
- id, length = 1, pos
- return id, length
-l256:
- id, length = 9, pos
- if accept('$') {
- goto l81
- }
- if accept('-') {
- goto l93
- }
- if accept('_') {
- goto l160
- }
- if r < '0' {
- goto l263out
- }
- if accept2('9') {
- goto l105
- }
-l263out:
- if r < 'A' {
- goto l265out
- }
- if accept2('Z') {
- goto l148
- }
- if r < 'a' {
- goto l265out
- }
- if accept2('z') {
- goto l148
- }
-l265out:
- return id, length
-l268:
- id, length = 9, pos
- if accept('$') {
- goto l81
- }
- if accept('-') {
- goto l93
- }
- if accept('_') {
- goto l160
- }
- if r < '0' {
- goto l275out
- }
- if accept2('9') {
- goto l105
- }
-l275out:
- if r < 'A' {
- goto l277out
- }
- if accept2('Z') {
- goto l148
- }
- if r < 'a' {
- goto l277out
- }
- if accept2('z') {
- goto l148
- }
-l277out:
- return id, length
-l280:
- if accept('`') {
- goto l285
- }
- if accept2('_') {
- goto l287
- }
- if r < 'a' {
- goto l282out
- }
- if accept2('\U0010ffff') {
- goto l287
- }
-l282out:
- return id, length
-l285:
- id, length = 7, pos
- return id, length
-l287:
- if accept('`') {
- goto l285
- }
- if accept2('_') {
- goto l287
- }
- if r < 'a' {
- goto l289out
- }
- if accept2('\U0010ffff') {
- goto l287
- }
-l289out:
- return id, length
-l292:
- id, length = 9, pos
- if accept('$') {
- goto l81
- }
- if accept('-') {
- goto l93
- }
- if accept('_') {
- goto l160
- }
- if accept('a') {
- goto l306
- }
- if r < '0' {
- goto l301out
- }
- if accept2('9') {
- goto l105
- }
-l301out:
- if r < 'A' {
- goto l303out
- }
- if accept2('Z') {
- goto l148
- }
- if r < 'b' {
- goto l303out
- }
- if accept2('z') {
- goto l148
- }
-l303out:
- return id, length
-l306:
- id, length = 9, pos
- if accept('$') {
- goto l81
- }
- if accept('-') {
- goto l93
- }
- if accept('_') {
- goto l160
- }
- if accept('l') {
- goto l320
- }
- if r < '0' {
- goto l315out
- }
- if accept2('9') {
- goto l105
- }
-l315out:
- if r < 'A' {
- goto l317out
- }
- if accept2('Z') {
- goto l148
- }
- if r < 'a' {
- goto l317out
- }
- if accept2('k') {
- goto l148
- }
- if r < 'm' {
- goto l317out
- }
- if accept2('z') {
- goto l148
- }
-l317out:
- return id, length
-l320:
- id, length = 9, pos
- if accept('$') {
- goto l81
- }
- if accept('-') {
- goto l93
- }
- if accept('_') {
- goto l160
- }
- if accept('s') {
- goto l334
- }
- if r < '0' {
- goto l329out
- }
- if accept2('9') {
- goto l105
- }
-l329out:
- if r < 'A' {
- goto l331out
- }
- if accept2('Z') {
- goto l148
- }
- if r < 'a' {
- goto l331out
- }
- if accept2('r') {
- goto l148
- }
- if r < 't' {
- goto l331out
- }
- if accept2('z') {
- goto l148
- }
-l331out:
- return id, length
-l334:
- id, length = 9, pos
- if accept('$') {
- goto l81
- }
- if accept('-') {
- goto l93
- }
- if accept('_') {
- goto l160
- }
- if accept('e') {
- goto l348
- }
- if r < '0' {
- goto l343out
- }
- if accept2('9') {
- goto l105
- }
-l343out:
- if r < 'A' {
- goto l345out
- }
- if accept2('Z') {
- goto l148
- }
- if r < 'a' {
- goto l345out
- }
- if accept2('d') {
- goto l148
- }
- if r < 'f' {
- goto l345out
- }
- if accept2('z') {
- goto l148
- }
-l345out:
- return id, length
-l348:
- id, length = 2, pos
- if accept('$') {
- goto l81
- }
- if accept('-') {
- goto l93
- }
- if accept('_') {
- goto l160
- }
- if r < '0' {
- goto l355out
- }
- if accept2('9') {
- goto l105
- }
-l355out:
- if r < 'A' {
- goto l357out
- }
- if accept2('Z') {
- goto l148
- }
- if r < 'a' {
- goto l357out
- }
- if accept2('z') {
- goto l148
- }
-l357out:
- return id, length
-l360:
- id, length = 9, pos
- if accept('$') {
- goto l81
- }
- if accept('-') {
- goto l93
- }
- if accept('_') {
- goto l160
- }
- if accept('r') {
- goto l374
- }
- if r < '0' {
- goto l369out
- }
- if accept2('9') {
- goto l105
- }
-l369out:
- if r < 'A' {
- goto l371out
- }
- if accept2('Z') {
- goto l148
- }
- if r < 'a' {
- goto l371out
- }
- if accept2('q') {
- goto l148
- }
- if r < 's' {
- goto l371out
- }
- if accept2('z') {
- goto l148
- }
-l371out:
- return id, length
-l374:
- id, length = 9, pos
- if accept('$') {
- goto l81
- }
- if accept('-') {
- goto l93
- }
- if accept('_') {
- goto l160
- }
- if accept('u') {
- goto l388
- }
- if r < '0' {
- goto l383out
- }
- if accept2('9') {
- goto l105
- }
-l383out:
- if r < 'A' {
- goto l385out
- }
- if accept2('Z') {
- goto l148
- }
- if r < 'a' {
- goto l385out
- }
- if accept2('t') {
- goto l148
- }
- if r < 'v' {
- goto l385out
- }
- if accept2('z') {
- goto l148
- }
-l385out:
- return id, length
-l388:
- id, length = 9, pos
- if accept('$') {
- goto l81
- }
- if accept('-') {
- goto l93
- }
- if accept('_') {
- goto l160
- }
- if accept('e') {
- goto l402
- }
- if r < '0' {
- goto l397out
- }
- if accept2('9') {
- goto l105
- }
-l397out:
- if r < 'A' {
- goto l399out
- }
- if accept2('Z') {
- goto l148
- }
- if r < 'a' {
- goto l399out
- }
- if accept2('d') {
- goto l148
- }
- if r < 'f' {
- goto l399out
- }
- if accept2('z') {
- goto l148
- }
-l399out:
- return id, length
-l402:
- id, length = 2, pos
- if accept('$') {
- goto l81
- }
- if accept('-') {
- goto l93
- }
- if accept('_') {
- goto l160
- }
- if r < '0' {
- goto l409out
- }
- if accept2('9') {
- goto l105
- }
-l409out:
- if r < 'A' {
- goto l411out
- }
- if accept2('Z') {
- goto l148
- }
- if r < 'a' {
- goto l411out
- }
- if accept2('z') {
- goto l148
- }
-l411out:
- return id, length
-l414:
- id, length = 4, pos
- return id, length
-l416:
- id, length = 6, pos
- return id, length
-l418:
- id, length = 0, pos
- return id, length
-}
-
-// Scan is used internally from Parse.
-func (p *Parser) Scan() (r scanner.Token) {
- return p.sc.Scan()
-}
-
-// init initalizes 'p' with content in 'src', assuming it comes from 'name'.
-// 'src' becomes "owned" by 'p'. init invalidates any pre-existing ASTs produced by 'p'. Mutating
-// 'src' invalidates the current AST returned from any parsing function called after init.
-func (p *Parser) init(name string, src []byte) (err error) {
- p.eof = false
- p.errBudget = 10
- p.n = 0
- p.off = 0
- p.src = src
- p.tok = scanner.Token{}
- p.tokIndex = 0
- p.sc = scanner.NewRecScanner(name, p.src, p.scan, int(white_space))
- return nil
-}
-
-// Assignment grammar:
-//
-// # Statements
-// Assignment = "=" Values br .
-//
-// State 0
-// on '='
-// shift and goto state 1
-// State 1
-// on boolean, number, str, word, Value, Word, Number, Boolean, String
-// call Values and goto state 2
-// State 2
-// on br
-// shift and goto state 3
-// State 3
-// Accept
-//
-// Assignment is used internally from Parse.
-func (p *Parser) Assignment() (r []int32) {
- accept, errorSet := false, 0
- r = append(p.get(), -int32(Assignment), 0)
- // state0:
- accept, errorSet = false, 1
- switch Symbol(p.tok.Ch) {
- case TOK_003d:
- r = append(r, p.shift())
- goto state1
- }
- return p.stop(r, accept, errorSet)
-state1:
- accept, errorSet = false, 3
- switch Symbol(p.tok.Ch) {
- case boolean, number, str, word, Value, Word, Number, Boolean, String:
- r = p.add(r, p.Values())
- goto state2
- }
- return p.stop(r, accept, errorSet)
-state2:
- accept, errorSet = false, 8
- switch Symbol(p.tok.Ch) {
- case br:
- r = append(r, p.shift())
- goto state3
- }
- return p.stop(r, accept, errorSet)
-state3:
- accept, errorSet = true, 0
- return p.stop(r, accept, errorSet)
-}
-
-// Body grammar:
-//
-// Body = lbrace [ Doc ] rbrace .
-//
-// State 0
-// on lbrace
-// shift and goto state 1
-// State 1
-// on rbrace
-// shift and goto state 2
-// on word, Stmt, Word
-// call Doc and goto state 3
-// State 2
-// Accept
-// State 3
-// on rbrace
-// shift and goto state 2
-//
-// Body is used internally from Parse.
-func (p *Parser) Body() (r []int32) {
- accept, errorSet := false, 0
- r = append(p.get(), -int32(Body), 0)
- // state0:
- accept, errorSet = false, 9
- switch Symbol(p.tok.Ch) {
- case lbrace:
- r = append(r, p.shift())
- goto state1
- }
- return p.stop(r, accept, errorSet)
-state1:
- accept, errorSet = false, 11
- switch Symbol(p.tok.Ch) {
- case rbrace:
- r = append(r, p.shift())
- goto state2
- case word, Stmt, Word:
- r = p.add(r, p.Doc())
- goto state3
- }
- return p.stop(r, accept, errorSet)
-state2:
- accept, errorSet = true, 0
- return p.stop(r, accept, errorSet)
-state3:
- accept, errorSet = false, 12
- switch Symbol(p.tok.Ch) {
- case rbrace:
- r = append(r, p.shift())
- goto state2
- }
- return p.stop(r, accept, errorSet)
-}
-
-// Boolean grammar:
-//
-// Boolean = boolean .
-//
-// State 0
-// on boolean
-// shift and goto state 1
-// State 1
-// Accept
-//
-// Boolean is used internally from Parse.
-func (p *Parser) Boolean() (r []int32) {
- accept, errorSet := false, 0
- r = append(p.get(), -int32(Boolean), 0)
- // state0:
- accept, errorSet = false, 6
- switch Symbol(p.tok.Ch) {
- case boolean:
- r = append(r, p.shift())
- goto state1
- }
- return p.stop(r, accept, errorSet)
-state1:
- accept, errorSet = true, 0
- return p.stop(r, accept, errorSet)
-}
-
-// Command grammar:
-//
-// Command = [Values] ( Body | br ) .
-//
-// State 0
-// on br
-// shift and goto state 1
-// on boolean, number, str, word, Value, Word, Number, Boolean, String
-// call Values and goto state 2
-// on lbrace
-// call Body and goto state 1
-// State 1
-// Accept
-// State 2
-// on br
-// shift and goto state 1
-// on lbrace
-// call Body and goto state 1
-//
-// Command is used internally from Parse.
-func (p *Parser) Command() (r []int32) {
- accept, errorSet := false, 0
- r = append(p.get(), -int32(Command), 0)
- // state0:
- accept, errorSet = false, 2
- switch Symbol(p.tok.Ch) {
- case br:
- r = append(r, p.shift())
- goto state1
- case boolean, number, str, word, Value, Word, Number, Boolean, String:
- r = p.add(r, p.Values())
- goto state2
- case lbrace:
- r = p.add(r, p.Body())
- goto state1
- }
- return p.stop(r, accept, errorSet)
-state1:
- accept, errorSet = true, 0
- return p.stop(r, accept, errorSet)
-state2:
- accept, errorSet = false, 7
- switch Symbol(p.tok.Ch) {
- case br:
- r = append(r, p.shift())
- goto state1
- case lbrace:
- r = p.add(r, p.Body())
- goto state1
- }
- return p.stop(r, accept, errorSet)
-}
-
-// Config grammar:
-//
-// Config = Doc .
-//
-// State 0
-// on word, Stmt, Word
-// call Doc and goto state 1
-// State 1
-// Accept
-//
-// Config is used internally from Parse.
-func (p *Parser) Config() (r []int32) {
- accept, errorSet := false, 0
- r = append(p.get(), -int32(Config), 0)
- // state0:
- accept, errorSet = false, 14
- switch Symbol(p.tok.Ch) {
- case word, Stmt, Word:
- r = p.add(r, p.Doc())
- goto state1
- }
- return p.stop(r, accept, errorSet)
-state1:
- accept, errorSet = true, 0
- if accept = accept && p.eof; accept {
- r = append(r, p.shift())
- }
- r[1] = int32(len(r) - 2)
- if !accept {
- p.err(p.tok.Position(), "%q [%s]: expected %v", p.tok.Src(), Symbol(p.tok.Ch), errorSets[errorSet])
- }
- return r
-}
-
-// Doc grammar:
-//
-// Doc = Stmt { Stmt } .
-//
-// State 0
-// on word, Word
-// call Stmt and goto state 1
-// State 1
-// Accept
-// on word, Word
-// call Stmt and goto state 1
-//
-// Doc is used internally from Parse.
-func (p *Parser) Doc() (r []int32) {
- accept, errorSet := false, 0
- r = append(p.get(), -int32(Doc), 0)
- // state0:
- accept, errorSet = false, 15
- switch Symbol(p.tok.Ch) {
- case word, Word:
- r = p.add(r, p.Stmt())
- goto state1
- }
- return p.stop(r, accept, errorSet)
-state1:
- accept, errorSet = true, 15
- switch Symbol(p.tok.Ch) {
- case word, Word:
- r = p.add(r, p.Stmt())
- goto state1
- }
- return p.stop(r, accept, errorSet)
-}
-
-// Number grammar:
-//
-// Number = number .
-//
-// State 0
-// on number
-// shift and goto state 1
-// State 1
-// Accept
-//
-// Number is used internally from Parse.
-func (p *Parser) Number() (r []int32) {
- accept, errorSet := false, 0
- r = append(p.get(), -int32(Number), 0)
- // state0:
- accept, errorSet = false, 10
- switch Symbol(p.tok.Ch) {
- case number:
- r = append(r, p.shift())
- goto state1
- }
- return p.stop(r, accept, errorSet)
-state1:
- accept, errorSet = true, 0
- return p.stop(r, accept, errorSet)
-}
-
-// Stmt grammar:
-//
-// Stmt = Word (Assignment | Command) .
-//
-// State 0
-// on word
-// call Word and goto state 1
-// State 1
-// on '='
-// call Assignment and goto state 2
-// on boolean, br, lbrace, number, str, word, Values, Value, Body, Word, Number, Boolean, String
-// call Command and goto state 2
-// State 2
-// Accept
-//
-// Stmt is used internally from Parse.
-func (p *Parser) Stmt() (r []int32) {
- accept, errorSet := false, 0
- r = append(p.get(), -int32(Stmt), 0)
- // state0:
- accept, errorSet = false, 16
- switch Symbol(p.tok.Ch) {
- case word:
- r = p.add(r, p.Word())
- goto state1
- }
- return p.stop(r, accept, errorSet)
-state1:
- accept, errorSet = false, 0
- switch Symbol(p.tok.Ch) {
- case TOK_003d:
- r = p.add(r, p.Assignment())
- goto state2
- case boolean, br, lbrace, number, str, word, Values, Value, Body, Word, Number, Boolean, String:
- r = p.add(r, p.Command())
- goto state2
- }
- return p.stop(r, accept, errorSet)
-state2:
- accept, errorSet = true, 0
- return p.stop(r, accept, errorSet)
-}
-
-// String grammar:
-//
-// String = str .
-//
-// State 0
-// on str
-// shift and goto state 1
-// State 1
-// Accept
-//
-// String is used internally from Parse.
-func (p *Parser) String() (r []int32) {
- accept, errorSet := false, 0
- r = append(p.get(), -int32(String), 0)
- // state0:
- accept, errorSet = false, 13
- switch Symbol(p.tok.Ch) {
- case str:
- r = append(r, p.shift())
- goto state1
- }
- return p.stop(r, accept, errorSet)
-state1:
- accept, errorSet = true, 0
- return p.stop(r, accept, errorSet)
-}
-
-// Value grammar:
-//
-// Value = Word | String | Number | Boolean .
-//
-// State 0
-// on word
-// call Word and goto state 1
-// on number
-// call Number and goto state 1
-// on boolean
-// call Boolean and goto state 1
-// on str
-// call String and goto state 1
-// State 1
-// Accept
-//
-// Value is used internally from Parse.
-func (p *Parser) Value() (r []int32) {
- accept, errorSet := false, 0
- r = append(p.get(), -int32(Value), 0)
- // state0:
- accept, errorSet = false, 5
- switch Symbol(p.tok.Ch) {
- case word:
- r = p.add(r, p.Word())
- goto state1
- case number:
- r = p.add(r, p.Number())
- goto state1
- case boolean:
- r = p.add(r, p.Boolean())
- goto state1
- case str:
- r = p.add(r, p.String())
- goto state1
- }
- return p.stop(r, accept, errorSet)
-state1:
- accept, errorSet = true, 0
- return p.stop(r, accept, errorSet)
-}
-
-// Values grammar:
-//
-// # Value types
-// Values = Value {Value} .
-//
-// State 0
-// on boolean, number, str, word, Word, Number, Boolean, String
-// call Value and goto state 1
-// State 1
-// Accept
-// on boolean, number, str, word, Word, Number, Boolean, String
-// call Value and goto state 1
-//
-// Values is used internally from Parse.
-func (p *Parser) Values() (r []int32) {
- accept, errorSet := false, 0
- r = append(p.get(), -int32(Values), 0)
- // state0:
- accept, errorSet = false, 4
- switch Symbol(p.tok.Ch) {
- case boolean, number, str, word, Word, Number, Boolean, String:
- r = p.add(r, p.Value())
- goto state1
- }
- return p.stop(r, accept, errorSet)
-state1:
- accept, errorSet = true, 4
- switch Symbol(p.tok.Ch) {
- case boolean, number, str, word, Word, Number, Boolean, String:
- r = p.add(r, p.Value())
- goto state1
- }
- return p.stop(r, accept, errorSet)
-}
-
-// Word grammar:
-//
-// # Atoms
-// Word = word .
-//
-// State 0
-// on word
-// shift and goto state 1
-// State 1
-// Accept
-//
-// Word is used internally from Parse.
-func (p *Parser) Word() (r []int32) {
- accept, errorSet := false, 0
- r = append(p.get(), -int32(Word), 0)
- // state0:
- accept, errorSet = false, 16
- switch Symbol(p.tok.Ch) {
- case word:
- r = append(r, p.shift())
- goto state1
- }
- return p.stop(r, accept, errorSet)
-state1:
- accept, errorSet = true, 0
- return p.stop(r, accept, errorSet)
-}
-
-func (p *Parser) shift() (r int32) {
- r = p.tokIndex
- if !p.eof {
- p.tok = p.Scan()
- p.tokIndex++
- p.eof = p.tok.Ch == rune(TOK_EOF)
- }
- return r
-}
-
-func (p *Parser) get() (r []int32) {
- if n := len(p.cache); n != 0 {
- r = p.cache[n-1][:0]
- p.cache = p.cache[:n-1]
- }
- return r
-}
-
-func (p *Parser) add(r, s []int32) (t []int32) {
- p.cache = append(p.cache, s)
- return append(r, s...)
-}
-
-func (p *Parser) stop(r []int32, accept bool, errorSet int) []int32 {
- r[1] = int32(len(r) - 2)
- if !accept {
- p.err(p.tok.Position(), "%q [%s]: expected %v", p.tok.Src(), Symbol(p.tok.Ch), errorSets[errorSet])
- }
- return r
-}
-
-// EOF reports whether the parser lookahead token is EOF.
-func (p *Parser) EOF() bool {
- return p.eof
-}
-
-// Token returns the n-th token in 'p'. Token panics if 'n' is out of range.
-func (p *Parser) Token(n int32) (r scanner.Token) {
- return p.sc.Token(int(n))
-}
-
-// Parse parses 'src'. 'src' becomes "owned" by the parser and must not be
-// mutated afterwards.
-func (p *Parser) Parse(name string, src []byte) (ast []int32, err error) {
- if err = p.init(name, src); err != nil {
- return nil, err
- }
-
- defer func() {
- switch e := recover(); x := e.(type) {
- case nil:
- // ok
- case scanner.ErrList:
- err = x
- case error:
- err = errors.Join(err, x)
- default:
- err = errors.Join(err, fmt.Errorf("%v", x))
- }
- }()
-
- p.tok = p.Scan()
- ast = p.Config()
- return ast, p.sc.Err()
-}
-
-func (p *Parser) err0(pos token.Position, s string, args ...any) {
- p.sc.AddErr(pos, s, args...)
- if p.errBudget--; p.errBudget == 0 {
- p.sc.AddErr(pos, "too many errors")
- }
-}
-
-func (p *Parser) err(pos token.Position, s string, args ...any) {
- p.err0(pos, s, args...)
- p.shift()
- if p.eof {
- panic(p.sc.Err())
- }
-}