aboutsummaryrefslogtreecommitdiff
path: root/spec/parser.go
diff options
context:
space:
mode:
authorRyo Nihei <nihei.dev@gmail.com>2022-03-30 00:44:17 +0900
committerRyo Nihei <nihei.dev@gmail.com>2022-03-30 00:50:06 +0900
commita1e4ae763cbf824f0d32a706cfe0d9603ce99b02 (patch)
treee32f48d6d5d3f56d495a8684653e913f14ca5ec8 /spec/parser.go
parentMove directives given to lexical productions (diff)
downloadurubu-a1e4ae763cbf824f0d32a706cfe0d9603ce99b02.tar.gz
urubu-a1e4ae763cbf824f0d32a706cfe0d9603ce99b02.tar.xz
Allow an alternative to have multiple directives
Diffstat (limited to 'spec/parser.go')
-rw-r--r--spec/parser.go21
1 files changed, 14 insertions, 7 deletions
diff --git a/spec/parser.go b/spec/parser.go
index fd11f83..2d16614 100644
--- a/spec/parser.go
+++ b/spec/parser.go
@@ -30,9 +30,9 @@ func (n *ProductionNode) isLexical() bool {
}
type AlternativeNode struct {
- Elements []*ElementNode
- Directive *DirectiveNode
- Pos Position
+ Elements []*ElementNode
+ Directives []*DirectiveNode
+ Pos Position
}
type ElementNode struct {
@@ -375,12 +375,19 @@ func (p *parser) parseAlternative() *AlternativeNode {
firstElemPos = elems[0].Pos
}
- dir := p.parseDirective()
+ var dirs []*DirectiveNode
+ for {
+ dir := p.parseDirective()
+ if dir == nil {
+ break
+ }
+ dirs = append(dirs, dir)
+ }
return &AlternativeNode{
- Elements: elems,
- Directive: dir,
- Pos: firstElemPos,
+ Elements: elems,
+ Directives: dirs,
+ Pos: firstElemPos,
}
}