diff options
author | Ryo Nihei <nihei.dev@gmail.com> | 2021-06-19 00:38:27 +0900 |
---|---|---|
committer | Ryo Nihei <nihei.dev@gmail.com> | 2021-06-19 00:38:27 +0900 |
commit | 52379a9e26578eb1105e73839db8157e24ba2d4c (patch) | |
tree | 1b03f2da6d9a67bd69823d01a050c2a95f1e9e55 /driver/parser_test.go | |
parent | Add SLR parsing table generator (diff) | |
download | urubu-52379a9e26578eb1105e73839db8157e24ba2d4c.tar.gz urubu-52379a9e26578eb1105e73839db8157e24ba2d4c.tar.xz |
Add driver
Diffstat (limited to 'driver/parser_test.go')
-rw-r--r-- | driver/parser_test.go | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/driver/parser_test.go b/driver/parser_test.go new file mode 100644 index 0000000..bc6a34e --- /dev/null +++ b/driver/parser_test.go @@ -0,0 +1,50 @@ +package driver + +import ( + "strings" + "testing" + + "github.com/nihei9/vartan/grammar" + "github.com/nihei9/vartan/spec" +) + +func TestParser_Parse(t *testing.T) { + specSrc := ` +expr + : expr "\+" term + | term + ; +term + : term "\*" factor + | factor + ; +factor + : "\(" expr "\)" + | id + ; +id: "[A-Za-z_][0-9A-Za-z_]*"; +` + ast, err := spec.Parse(strings.NewReader(specSrc)) + if err != nil { + t.Fatal(err) + } + g, err := grammar.NewGrammar(ast) + if err != nil { + t.Fatal(err) + } + gram, err := grammar.Compile(g) + if err != nil { + t.Fatal(err) + } + src := `(a+(b+c))*d+e` + p, err := NewParser(gram, strings.NewReader(src)) + if err != nil { + t.Fatal(err) + } + err = p.Parse() + if err != nil { + t.Fatal(err) + } + + printCST(p.GetCST(), 0) +} |