diff options
author | Ryo Nihei <nihei.dev@gmail.com> | 2022-04-14 02:11:06 +0900 |
---|---|---|
committer | Ryo Nihei <nihei.dev@gmail.com> | 2022-04-15 21:27:19 +0900 |
commit | 97d36965cbb30108340727a982539e67dafea92d (patch) | |
tree | 8b08cfb995dc8eb219c1a8bdc753133113316b92 /spec/parser.go | |
parent | Move compiler tests from driver package to grammar package (diff) | |
download | cotia-97d36965cbb30108340727a982539e67dafea92d.tar.gz cotia-97d36965cbb30108340727a982539e67dafea92d.tar.xz |
Add tests for compiler
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, |