aboutsummaryrefslogtreecommitdiff
path: root/spec/parser_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'spec/parser_test.go')
-rw-r--r--spec/parser_test.go62
1 files changed, 15 insertions, 47 deletions
diff --git a/spec/parser_test.go b/spec/parser_test.go
index e81f95e..3cc772d 100644
--- a/spec/parser_test.go
+++ b/spec/parser_test.go
@@ -62,20 +62,9 @@ func TestParse(t *testing.T) {
ID: id,
}
}
- symPosParam := func(symPos *SymbolPositionNode) *ParameterNode {
- return &ParameterNode{
- SymbolPosition: symPos,
- }
- }
- symPos := func(symPos int, exp bool) *SymbolPositionNode {
- return &SymbolPositionNode{
- Position: symPos,
- Expansion: exp,
- }
- }
- withSymPosPos := func(symPos *SymbolPositionNode, pos Position) *SymbolPositionNode {
- symPos.Pos = pos
- return symPos
+ exp := func(param *ParameterNode) *ParameterNode {
+ param.Expansion = true
+ return param
}
withParamPos := func(param *ParameterNode, pos Position) *ParameterNode {
param.Pos = pos
@@ -393,14 +382,14 @@ s: foo; foo: "foo";
synErr: synErrSemicolonNoNewline,
},
{
- caption: "a grammar can contain 'ast' directives",
+ caption: "a grammar can contain 'ast' directives and expansion operator",
src: `
s
- : foo bar_list #ast $1 $2
+ : foo bar_list #ast foo bar_list
;
bar_list
- : bar_list bar #ast $1... $2
- | bar #ast $1
+ : bar_list bar #ast bar_list... bar
+ | bar #ast bar
;
foo: "foo";
bar: "bar";
@@ -410,17 +399,17 @@ bar: "bar";
prod("s",
withAltDir(
alt(id("foo"), id("bar_list")),
- dir("ast", symPosParam(symPos(1, false)), symPosParam(symPos(2, false))),
+ dir("ast", idParam("foo"), idParam("bar_list")),
),
),
prod("bar_list",
withAltDir(
alt(id("bar_list"), id("bar")),
- dir("ast", symPosParam(symPos(1, true)), symPosParam(symPos(2, false))),
+ dir("ast", exp(idParam("bar_list")), idParam("bar")),
),
withAltDir(
alt(id("bar")),
- dir("ast", symPosParam(symPos(1, false))),
+ dir("ast", idParam("bar")),
),
),
},
@@ -439,7 +428,7 @@ bar: "bar";
src: `
#mode default
exp
- : exp "\+" id #ast $1 $2
+ : exp "\+" id #ast exp id
| id
;
whitespace: "\u{0020}+" #skip;
@@ -462,18 +451,8 @@ fragment number: "[0-9]";
),
withDirPos(
dir("ast",
- withParamPos(
- symPosParam(
- withSymPosPos(symPos(1, false), newPos(4)),
- ),
- newPos(4),
- ),
- withParamPos(
- symPosParam(
- withSymPosPos(symPos(2, false), newPos(4)),
- ),
- newPos(4),
- ),
+ withParamPos(idParam("exp"), newPos(4)),
+ withParamPos(idParam("id"), newPos(4)),
),
newPos(4),
),
@@ -861,19 +840,8 @@ func testParameter(t *testing.T, param, expected *ParameterNode, checkPosition b
if param.String != expected.String {
t.Fatalf("unexpected string parameter; want: %v, got: %v", expected.ID, param.ID)
}
- if expected.SymbolPosition == nil && param.SymbolPosition != nil {
- t.Fatalf("unexpected symbol position parameter; want: nil, got: %+v", param.SymbolPosition)
- }
- if expected.SymbolPosition != nil {
- if param.SymbolPosition == nil {
- t.Fatalf("unexpected symbol position parameter; want: %+v, got: nil", expected.SymbolPosition)
- }
- if param.SymbolPosition.Position != expected.SymbolPosition.Position {
- t.Fatalf("unexpected symbol position; want: %v, got: %v", expected.SymbolPosition.Position, param.SymbolPosition.Position)
- }
- if checkPosition {
- testPosition(t, param.Pos, expected.Pos)
- }
+ if param.Expansion != expected.Expansion {
+ t.Fatalf("unexpected expansion; want: %v, got: %v", expected.Expansion, param.Expansion)
}
if checkPosition {
testPosition(t, param.Pos, expected.Pos)