aboutsummaryrefslogtreecommitdiff
path: root/spec/parser.go
diff options
context:
space:
mode:
authorRyo Nihei <nihei.dev@gmail.com>2022-03-29 01:43:36 +0900
committerRyo Nihei <nihei.dev@gmail.com>2022-03-29 01:45:08 +0900
commit4d2a389c0ea605413d1cc89ae35f2a3aaa293072 (patch)
tree6b6a5fe98f2a27a38cdbc569706e43970fbc05e5 /spec/parser.go
parentAdd label notation (diff)
downloadurubu-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.go35
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 {