diff options
Diffstat (limited to 'spec/parser.go')
-rw-r--r-- | spec/parser.go | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/spec/parser.go b/spec/parser.go index 2d16614..a1d23f0 100644 --- a/spec/parser.go +++ b/spec/parser.go @@ -56,6 +56,7 @@ type DirectiveNode struct { type ParameterNode struct { ID string + Pattern string String string Expansion bool Pos Position @@ -197,19 +198,17 @@ func (p *parser) parseMetaData() *DirectiveNode { mdPos := p.lastTok.pos if !p.consume(tokenKindID) { - raiseSyntaxError(p.pos.Row, synErrNoProductionName) + raiseSyntaxError(p.pos.Row, synErrNoMDName) } name := p.lastTok.text var params []*ParameterNode for { - if !p.consume(tokenKindID) { + param := p.parseParameter() + if param == nil { break } - params = append(params, &ParameterNode{ - ID: p.lastTok.text, - Pos: p.lastTok.pos, - }) + params = append(params, param) } return &DirectiveNode{ @@ -463,6 +462,11 @@ func (p *parser) parseParameter() *ParameterNode { ID: p.lastTok.text, Pos: p.lastTok.pos, } + case p.consume(tokenKindTerminalPattern): + param = &ParameterNode{ + Pattern: p.lastTok.text, + Pos: p.lastTok.pos, + } case p.consume(tokenKindStringLiteral): param = &ParameterNode{ String: p.lastTok.text, |