diff options
author | Ryo Nihei <nihei.dev@gmail.com> | 2022-03-29 01:43:36 +0900 |
---|---|---|
committer | Ryo Nihei <nihei.dev@gmail.com> | 2022-03-29 01:45:08 +0900 |
commit | 4d2a389c0ea605413d1cc89ae35f2a3aaa293072 (patch) | |
tree | 6b6a5fe98f2a27a38cdbc569706e43970fbc05e5 /spec/parser.go | |
parent | Add label notation (diff) | |
download | urubu-4d2a389c0ea605413d1cc89ae35f2a3aaa293072.tar.gz urubu-4d2a389c0ea605413d1cc89ae35f2a3aaa293072.tar.xz |
Use IDs and labels as parameters of an #ast directive instead of symbol positions
Diffstat (limited to 'spec/parser.go')
-rw-r--r-- | spec/parser.go | 35 |
1 files changed, 11 insertions, 24 deletions
diff --git a/spec/parser.go b/spec/parser.go index a9e4d62..e092f59 100644 --- a/spec/parser.go +++ b/spec/parser.go @@ -55,14 +55,8 @@ type DirectiveNode struct { } type ParameterNode struct { - ID string - String string - SymbolPosition *SymbolPositionNode - Pos Position -} - -type SymbolPositionNode struct { - Position int + ID string + String string Expansion bool Pos Position } @@ -453,32 +447,25 @@ func (p *parser) parseDirective() *DirectiveNode { } func (p *parser) parseParameter() *ParameterNode { + var param *ParameterNode switch { case p.consume(tokenKindID): - return &ParameterNode{ + param = &ParameterNode{ ID: p.lastTok.text, Pos: p.lastTok.pos, } case p.consume(tokenKindStringLiteral): - return &ParameterNode{ + param = &ParameterNode{ String: p.lastTok.text, Pos: p.lastTok.pos, } - case p.consume(tokenKindPosition): - symPos := &SymbolPositionNode{ - Position: p.lastTok.num, - Pos: p.lastTok.pos, - } - if p.consume(tokenKindExpantion) { - symPos.Expansion = true - } - return &ParameterNode{ - SymbolPosition: symPos, - Pos: symPos.Pos, - } + default: + return nil } - - return nil + if p.consume(tokenKindExpantion) { + param.Expansion = true + } + return param } func (p *parser) consume(expected tokenKind) bool { |