diff options
author | Ryo Nihei <nihei.dev@gmail.com> | 2022-03-30 00:44:17 +0900 |
---|---|---|
committer | Ryo Nihei <nihei.dev@gmail.com> | 2022-03-30 00:50:06 +0900 |
commit | a1e4ae763cbf824f0d32a706cfe0d9603ce99b02 (patch) | |
tree | e32f48d6d5d3f56d495a8684653e913f14ca5ec8 /spec/parser.go | |
parent | Move directives given to lexical productions (diff) | |
download | urubu-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.go | 21 |
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, } } |