-
Notifications
You must be signed in to change notification settings - Fork 0
/
parser.ict.go
119 lines (96 loc) · 4.36 KB
/
parser.ict.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
package fe
/*
File automatically generated by the ictiobus compiler. DO NOT EDIT. This was
created by invoking ictiobus with the following command:
ictcc --slr -l TunaScript -v 1.0 -d tsi --ir github.com/dekarrin/tunaq/tunascript/syntax.AST --hooks ./tunascript/syntax --dest ./tunascript/fe tunascript/tunascript.md --sim-off
*/
import (
_ "embed"
"github.com/dekarrin/ictiobus/grammar"
"github.com/dekarrin/ictiobus/parse"
"github.com/dekarrin/tunaq/tunascript/fe/fetoken"
)
var (
//go:embed parser.cff
parserData []byte
)
// Grammar returns the grammar accepted by the generated ictiobus parser for
// TunaScript. This grammar will also be included with with the parser itself,
// but it is included here as well for convenience.
func Grammar() grammar.CFG {
g := grammar.CFG{}
g.AddTerm(fetoken.TCExclamationMark.ID(), fetoken.TCExclamationMark)
g.AddTerm(fetoken.TCAsterisk.ID(), fetoken.TCAsterisk)
g.AddTerm(fetoken.TCPlusSign.ID(), fetoken.TCPlusSign)
g.AddTerm(fetoken.TCPlusSignplusSign.ID(), fetoken.TCPlusSignplusSign)
g.AddTerm(fetoken.TCPlusSignequalsSign.ID(), fetoken.TCPlusSignequalsSign)
g.AddTerm(fetoken.TCHyphenMinus.ID(), fetoken.TCHyphenMinus)
g.AddTerm(fetoken.TCHyphenMinushyphenMinus.ID(), fetoken.TCHyphenMinushyphenMinus)
g.AddTerm(fetoken.TCEqualsSign.ID(), fetoken.TCEqualsSign)
g.AddTerm(fetoken.TCSolidus.ID(), fetoken.TCSolidus)
g.AddTerm(fetoken.TCLessThanSign.ID(), fetoken.TCLessThanSign)
g.AddTerm(fetoken.TCLessThanSignequalsSign.ID(), fetoken.TCLessThanSignequalsSign)
g.AddTerm(fetoken.TCGreaterThanSign.ID(), fetoken.TCGreaterThanSign)
g.AddTerm(fetoken.TCGreaterThanSignequalsSign.ID(), fetoken.TCGreaterThanSignequalsSign)
g.AddTerm(fetoken.TCCommercialAtstr.ID(), fetoken.TCCommercialAtstr)
g.AddTerm(fetoken.TCAnd.ID(), fetoken.TCAnd)
g.AddTerm(fetoken.TCBool.ID(), fetoken.TCBool)
g.AddTerm(fetoken.TCComma.ID(), fetoken.TCComma)
g.AddTerm(fetoken.TCEq.ID(), fetoken.TCEq)
g.AddTerm(fetoken.TCId.ID(), fetoken.TCId)
g.AddTerm(fetoken.TCLp.ID(), fetoken.TCLp)
g.AddTerm(fetoken.TCNe.ID(), fetoken.TCNe)
g.AddTerm(fetoken.TCNum.ID(), fetoken.TCNum)
g.AddTerm(fetoken.TCOr.ID(), fetoken.TCOr)
g.AddTerm(fetoken.TCRp.ID(), fetoken.TCRp)
g.AddTerm(fetoken.TCSet.ID(), fetoken.TCSet)
g.AddTerm(fetoken.TCStr.ID(), fetoken.TCStr)
g.AddRule("TUNASCRIPT", []string{"EXPR"})
g.AddRule("EXPR", []string{"id", "set", "EXPR"})
g.AddRule("EXPR", []string{"id", "+=", "EXPR"})
g.AddRule("EXPR", []string{"id", "-=", "EXPR"})
g.AddRule("EXPR", []string{"BOOL-OP"})
g.AddRule("BOOL-OP", []string{"BOOL-OP", "or", "EQUALITY"})
g.AddRule("BOOL-OP", []string{"BOOL-OP", "and", "EQUALITY"})
g.AddRule("BOOL-OP", []string{"EQUALITY"})
g.AddRule("EQUALITY", []string{"EQUALITY", "eq", "COMPARISON"})
g.AddRule("EQUALITY", []string{"EQUALITY", "ne", "COMPARISON"})
g.AddRule("EQUALITY", []string{"COMPARISON"})
g.AddRule("COMPARISON", []string{"COMPARISON", "<", "SUM"})
g.AddRule("COMPARISON", []string{"COMPARISON", ">", "SUM"})
g.AddRule("COMPARISON", []string{"COMPARISON", "<=", "SUM"})
g.AddRule("COMPARISON", []string{"COMPARISON", ">=", "SUM"})
g.AddRule("COMPARISON", []string{"SUM"})
g.AddRule("SUM", []string{"SUM", "+", "PRODUCT"})
g.AddRule("SUM", []string{"SUM", "-", "PRODUCT"})
g.AddRule("SUM", []string{"PRODUCT"})
g.AddRule("PRODUCT", []string{"PRODUCT", "*", "NEGATION"})
g.AddRule("PRODUCT", []string{"PRODUCT", "/", "NEGATION"})
g.AddRule("PRODUCT", []string{"NEGATION"})
g.AddRule("NEGATION", []string{"!", "NEGATION"})
g.AddRule("NEGATION", []string{"-", "NEGATION"})
g.AddRule("NEGATION", []string{"TERM"})
g.AddRule("TERM", []string{"lp", "EXPR", "rp"})
g.AddRule("TERM", []string{"id", "ARG-LIST"})
g.AddRule("TERM", []string{"VALUE"})
g.AddRule("ARG-LIST", []string{"lp", "ARGS", "rp"})
g.AddRule("ARG-LIST", []string{"lp", "rp"})
g.AddRule("ARGS", []string{"ARGS", "comma", "EXPR"})
g.AddRule("ARGS", []string{"EXPR"})
g.AddRule("VALUE", []string{"id", "++"})
g.AddRule("VALUE", []string{"id", "--"})
g.AddRule("VALUE", []string{"id"})
g.AddRule("VALUE", []string{"num"})
g.AddRule("VALUE", []string{"@str"})
g.AddRule("VALUE", []string{"str"})
g.AddRule("VALUE", []string{"bool"})
return g
}
// Parser returns the generated ictiobus Parser for TunaScript.
func Parser() parse.Parser {
p, err := parse.DecodeBytes(parserData)
if err != nil {
panic("corrupted parser.cff file: " + err.Error())
}
return p
}