@@ -15,8 +15,7 @@ namespace rego
15
15
inline constexpr auto RuleHeadComp = TokenDef(" rule-head-comp" );
16
16
inline constexpr auto RuleHeadFunc = TokenDef(" rule-head-func" );
17
17
inline constexpr auto RuleArgs = TokenDef(" rule-args" );
18
- inline constexpr auto RuleBody = TokenDef(" rule-body" );
19
- inline constexpr auto Query = TokenDef(" query" );
18
+ inline constexpr auto Query = TokenDef(" query" , flag::symtab);
20
19
inline constexpr auto Literal = TokenDef(" literal" );
21
20
inline constexpr auto Expr = TokenDef(" expr" );
22
21
inline constexpr auto ExprInfix = TokenDef(" expr-infix" );
@@ -28,7 +27,6 @@ namespace rego
28
27
inline constexpr auto ArithOperator = TokenDef(" arith-operator" );
29
28
inline constexpr auto AssignOperator = TokenDef(" assign-operator" );
30
29
inline constexpr auto Ref = TokenDef(" ref" );
31
- inline constexpr auto RefArg = TokenDef(" ref-arg" );
32
30
inline constexpr auto RefArgBrack = TokenDef(" ref-arg-brack" );
33
31
inline constexpr auto RefArgDot = TokenDef(" ref-arg-dot" );
34
32
inline constexpr auto RefArgCall = TokenDef(" ref-arg-call" );
@@ -60,8 +58,11 @@ namespace rego
60
58
inline constexpr auto Divide = TokenDef(" /" );
61
59
inline constexpr auto Modulo = TokenDef(" %" );
62
60
inline constexpr auto Assign = TokenDef(" :=" );
61
+ inline constexpr auto Unify = TokenDef(" =" );
62
+ inline constexpr auto SomeDecl = TokenDef(" some-decl" );
63
63
64
64
// intermediate tokens
65
+ inline constexpr auto UnifyBody = TokenDef(" unify-body" );
65
66
inline constexpr auto RuleBodySeq = TokenDef(" rule-body-seq" );
66
67
inline constexpr auto RefHead = TokenDef(" ref-head" );
67
68
inline constexpr auto RefArgSeq = TokenDef(" ref-arg-seq" );
@@ -79,15 +80,19 @@ namespace rego
79
80
inline constexpr auto Data = TokenDef(" data" , flag::symtab | flag::lookup);
80
81
81
82
// fused
82
- inline constexpr auto RuleComp =
83
- TokenDef (" rule-comp" , flag::symtab | flag::lookup | flag::lookdown);
84
- inline constexpr auto RuleFunc =
85
- TokenDef (" rule-func" , flag::symtab | flag::lookup | flag::lookdown);
83
+ inline constexpr auto RuleComp = TokenDef(
84
+ " rule-comp" ,
85
+ flag::symtab | flag::lookup | flag::lookdown | flag::defbeforeuse);
86
+ inline constexpr auto RuleFunc = TokenDef(
87
+ " rule-func" ,
88
+ flag::symtab | flag::lookup | flag::lookdown | flag::defbeforeuse);
86
89
inline constexpr auto DefaultRule =
87
90
TokenDef (" default-rule" , flag::lookup | flag::lookdown);
88
- inline constexpr auto LocalRule = TokenDef(" local-rule" , flag::lookup);
91
+ inline constexpr auto Local =
92
+ TokenDef (" local" , flag::lookup | flag::shadowing);
89
93
inline constexpr auto ArithInfix = TokenDef(" arith-infix" );
90
94
inline constexpr auto BoolInfix = TokenDef(" bool-infix" );
95
+ inline constexpr auto AssignInfix = TokenDef(" assign-infix" );
91
96
inline constexpr auto ArgVar = TokenDef(" arg-var" , flag::lookup);
92
97
inline constexpr auto ArgVal = TokenDef(" arg-val" );
93
98
@@ -97,7 +102,10 @@ namespace rego
97
102
inline constexpr auto Math = TokenDef(" math" );
98
103
inline constexpr auto Op = TokenDef(" op" );
99
104
inline constexpr auto Comparison = TokenDef(" comparison" );
100
- inline constexpr auto Value = TokenDef(" value" );
105
+ inline constexpr auto Function = TokenDef(" function" );
106
+ inline constexpr auto Arg = TokenDef(" arg" );
107
+ inline constexpr auto ArgSeq = TokenDef(" arg-seq" );
108
+ inline constexpr auto Val = TokenDef(" value" );
101
109
inline constexpr auto Id = TokenDef(" id" );
102
110
inline constexpr auto Head = TokenDef(" head" );
103
111
inline constexpr auto Tail = TokenDef(" tail" );
@@ -107,7 +115,15 @@ namespace rego
107
115
inline constexpr auto RefTerm = TokenDef(" ref-term" );
108
116
inline constexpr auto NumTerm = TokenDef(" num-term" );
109
117
inline constexpr auto ArithArg = TokenDef(" arith-arg" );
118
+ inline constexpr auto BoolArg = TokenDef(" bool-arg" );
119
+ inline constexpr auto AssignArg = TokenDef(" assign-arg" );
110
120
inline constexpr auto RuleHeadType = TokenDef(" rule-head-type" );
121
+ inline constexpr auto UnifyExpr = TokenDef(" unify-expr" );
122
+ inline constexpr auto TermSet = TokenDef(" term-set" );
123
+ inline constexpr auto Empty = TokenDef(" empty" );
124
+ inline constexpr auto SimpleRef = TokenDef(" simple-ref" );
125
+ inline constexpr auto Binding = TokenDef(" binding" );
126
+ inline constexpr auto DefaultTerm = TokenDef(" default-term" );
111
127
112
128
// lists
113
129
inline constexpr auto List = TokenDef(" list" );
@@ -120,6 +136,7 @@ namespace rego
120
136
inline constexpr auto Paren = TokenDef(" paren" );
121
137
inline constexpr auto Not = TokenDef(" not" );
122
138
inline constexpr auto Default = TokenDef(" default" );
139
+ inline constexpr auto Some = TokenDef(" some" );
123
140
124
141
inline auto err (NodeRange& r, const std::string& msg)
125
142
{
@@ -141,4 +158,6 @@ namespace rego
141
158
using PassCheck = std::tuple<std::string, Pass, const wf::Wellformed&>;
142
159
std::vector<PassCheck> passes ();
143
160
std::string to_json (const Node& node);
161
+ bool contains_local (const Node& node);
162
+ bool is_in (const Node& node, const Token& token);
144
163
}
0 commit comments