aboutsummaryrefslogtreecommitdiff
path: root/driver/parser_test.go
diff options
context:
space:
mode:
authorRyo Nihei <nihei.dev@gmail.com>2022-03-28 22:31:30 +0900
committerRyo Nihei <nihei.dev@gmail.com>2022-03-29 01:45:05 +0900
commited43562cf58e8c0f9390421848879308fdfc60cb (patch)
tree16beff7d233b95ae53d2c8019bc47be378f304b8 /driver/parser_test.go
parentSimplify the syntax of #ast directive (diff)
downloadcotia-ed43562cf58e8c0f9390421848879308fdfc60cb.tar.gz
cotia-ed43562cf58e8c0f9390421848879308fdfc60cb.tar.xz
Add label notation
Diffstat (limited to 'driver/parser_test.go')
-rw-r--r--driver/parser_test.go60
1 files changed, 60 insertions, 0 deletions
diff --git a/driver/parser_test.go b/driver/parser_test.go
index 3f67bf2..dfc2fe5 100644
--- a/driver/parser_test.go
+++ b/driver/parser_test.go
@@ -717,6 +717,66 @@ error: 'error' #skip;
`,
specErr: true,
},
+ // A label must be unique in an alternative.
+ {
+ specSrc: `
+%name test
+
+s
+ : foo@x bar@x
+ ;
+
+foo: 'foo';
+bar: 'bar';
+`,
+ specErr: true,
+ },
+ // The same label can be used between different alternatives.
+ {
+ specSrc: `
+%name test
+
+s
+ : foo@x bar
+ | foo@x
+ ;
+
+foo: 'foo';
+bar: 'bar';
+`,
+ src: `foo`,
+ },
+ // A label cannot be the same name as terminal symbols.
+ {
+ specSrc: `
+%name test
+
+s
+ : foo bar@foo
+ ;
+
+foo: 'foo';
+bar: 'bar';
+`,
+ specErr: true,
+ },
+ // A label cannot be the same name as non-terminal symbols.
+ {
+ specSrc: `
+%name test
+
+s
+ : foo@a
+ ;
+a
+ : bar
+ ;
+
+foo: 'foo';
+bar: 'bar';
+`,
+ specErr: true,
+ },
}
classes := []grammar.Class{