diff options
author | Ryo Nihei <nihei.dev@gmail.com> | 2021-08-09 01:51:41 +0900 |
---|---|---|
committer | Ryo Nihei <nihei.dev@gmail.com> | 2021-08-15 20:43:02 +0900 |
commit | 00f8b091a9f1eb3ed0348900784be07c326c0dc1 (patch) | |
tree | 5bec55d7fd4c49f01e06a76c50c9949f7f11ca32 /driver/parser_test.go | |
parent | Update CHANGELOG (diff) | |
download | urubu-00f8b091a9f1eb3ed0348900784be07c326c0dc1.tar.gz urubu-00f8b091a9f1eb3ed0348900784be07c326c0dc1.tar.xz |
Support LALR(1) class
Diffstat (limited to 'driver/parser_test.go')
-rw-r--r-- | driver/parser_test.go | 87 |
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()) + }) + } } } |