diff options
author | Ryo Nihei <nihei.dev@gmail.com> | 2021-09-03 14:49:37 +0900 |
---|---|---|
committer | Ryo Nihei <nihei.dev@gmail.com> | 2021-09-03 14:55:13 +0900 |
commit | f4e3fef07e8e38e37e63989254718e6c4cb543a9 (patch) | |
tree | 0eeb7b043800282d921d81159e8d5d9ec87c1211 /cmd/vartan/parse.go | |
parent | Rename describe command to show command (diff) | |
download | urubu-f4e3fef07e8e38e37e63989254718e6c4cb543a9.tar.gz urubu-f4e3fef07e8e38e37e63989254718e6c4cb543a9.tar.xz |
Make semantic actions user-configurable
Diffstat (limited to 'cmd/vartan/parse.go')
-rw-r--r-- | cmd/vartan/parse.go | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/cmd/vartan/parse.go b/cmd/vartan/parse.go index 5cf8b5b..c370c15 100644 --- a/cmd/vartan/parse.go +++ b/cmd/vartan/parse.go @@ -69,6 +69,7 @@ func runParse(cmd *cobra.Command, args []string) (retErr error) { } var p *driver.Parser + var treeAct *driver.SyntaxTreeActionSet { src := os.Stdin if *parseFlags.source != "" { @@ -81,15 +82,22 @@ func runParse(cmd *cobra.Command, args []string) (retErr error) { } var opts []driver.ParserOption - switch { - case *parseFlags.cst: - opts = append(opts, driver.MakeCST()) - case !*parseFlags.onlyParse: - opts = append(opts, driver.MakeAST()) - } - if *parseFlags.disableLAC { - opts = append(opts, driver.DisableLAC()) + { + switch { + case *parseFlags.cst: + treeAct = driver.NewSyntaxTreeActionSet(cgram, false, true) + case !*parseFlags.onlyParse: + treeAct = driver.NewSyntaxTreeActionSet(cgram, true, false) + } + if treeAct != nil { + opts = append(opts, driver.SemanticAction(treeAct)) + } + + if *parseFlags.disableLAC { + opts = append(opts, driver.DisableLAC()) + } } + p, err = driver.NewParser(cgram, src, opts...) if err != nil { return err @@ -128,9 +136,9 @@ func runParse(cmd *cobra.Command, args []string) (retErr error) { if len(synErrs) == 0 && !*parseFlags.onlyParse { var tree *driver.Node if *parseFlags.cst { - tree = p.CST() + tree = treeAct.CST() } else { - tree = p.AST() + tree = treeAct.AST() } driver.PrintTree(os.Stdout, tree) } |