aboutsummaryrefslogtreecommitdiff
path: root/driver/parser_test.go
diff options
context:
space:
mode:
authorRyo Nihei <nihei.dev@gmail.com>2021-06-19 00:38:27 +0900
committerRyo Nihei <nihei.dev@gmail.com>2021-06-19 00:38:27 +0900
commit52379a9e26578eb1105e73839db8157e24ba2d4c (patch)
tree1b03f2da6d9a67bd69823d01a050c2a95f1e9e55 /driver/parser_test.go
parentAdd SLR parsing table generator (diff)
downloadurubu-52379a9e26578eb1105e73839db8157e24ba2d4c.tar.gz
urubu-52379a9e26578eb1105e73839db8157e24ba2d4c.tar.xz
Add driver
Diffstat (limited to 'driver/parser_test.go')
-rw-r--r--driver/parser_test.go50
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)
+}