aboutsummaryrefslogtreecommitdiff
path: root/driver/parser_test.go
diff options
context:
space:
mode:
authorRyo Nihei <nihei.dev@gmail.com>2021-08-09 01:51:41 +0900
committerRyo Nihei <nihei.dev@gmail.com>2021-08-15 20:43:02 +0900
commit00f8b091a9f1eb3ed0348900784be07c326c0dc1 (patch)
tree5bec55d7fd4c49f01e06a76c50c9949f7f11ca32 /driver/parser_test.go
parentUpdate CHANGELOG (diff)
downloadurubu-00f8b091a9f1eb3ed0348900784be07c326c0dc1.tar.gz
urubu-00f8b091a9f1eb3ed0348900784be07c326c0dc1.tar.xz
Support LALR(1) class
Diffstat (limited to 'driver/parser_test.go')
-rw-r--r--driver/parser_test.go87
1 files changed, 47 insertions, 40 deletions
diff --git a/driver/parser_test.go b/driver/parser_test.go
index a46de9b..0776232 100644
--- a/driver/parser_test.go
+++ b/driver/parser_test.go
@@ -396,57 +396,64 @@ b: "a";
specErr: true,
},
}
+
+ classes := []grammar.Class{
+ grammar.ClassSLR,
+ grammar.ClassLALR,
+ }
+
for i, tt := range tests {
- t.Run(fmt.Sprintf("#%v", i), func(t *testing.T) {
- ast, err := spec.Parse(strings.NewReader(tt.specSrc))
- if err != nil {
- t.Fatal(err)
- }
+ for _, class := range classes {
+ t.Run(fmt.Sprintf("#%v", i), func(t *testing.T) {
+ ast, err := spec.Parse(strings.NewReader(tt.specSrc))
+ if err != nil {
+ t.Fatal(err)
+ }
- b := grammar.GrammarBuilder{
- AST: ast,
- }
- g, err := b.Build()
- if tt.specErr {
- if err == nil {
- t.Fatal("an expected error didn't occur")
+ b := grammar.GrammarBuilder{
+ AST: ast,
+ }
+ g, err := b.Build()
+ if tt.specErr {
+ if err == nil {
+ t.Fatal("an expected error didn't occur")
+ }
+ return
+ } else {
+ if err != nil {
+ t.Fatal(err)
+ }
}
- // fmt.Printf("error: %v\n", err)
- return
- } else {
+
+ gram, err := grammar.Compile(g, grammar.SpecifyClass(class))
if err != nil {
t.Fatal(err)
}
- }
-
- gram, err := grammar.Compile(g)
- if err != nil {
- t.Fatal(err)
- }
- p, err := NewParser(gram, strings.NewReader(tt.src), MakeAST(), MakeCST())
- if err != nil {
- t.Fatal(err)
- }
+ p, err := NewParser(gram, strings.NewReader(tt.src), MakeAST(), MakeCST())
+ if err != nil {
+ t.Fatal(err)
+ }
- err = p.Parse()
- if err != nil {
- t.Fatal(err)
- }
+ err = p.Parse()
+ if err != nil {
+ t.Fatal(err)
+ }
- if tt.cst != nil {
- testTree(t, p.CST(), tt.cst)
- }
+ if tt.cst != nil {
+ testTree(t, p.CST(), tt.cst)
+ }
- if tt.ast != nil {
- testTree(t, p.AST(), tt.ast)
- }
+ if tt.ast != nil {
+ testTree(t, p.AST(), tt.ast)
+ }
- fmt.Println("CST:")
- PrintTree(os.Stdout, p.CST())
- fmt.Println("AST:")
- PrintTree(os.Stdout, p.AST())
- })
+ fmt.Println("CST:")
+ PrintTree(os.Stdout, p.CST())
+ fmt.Println("AST:")
+ PrintTree(os.Stdout, p.AST())
+ })
+ }
}
}