From f4e3fef07e8e38e37e63989254718e6c4cb543a9 Mon Sep 17 00:00:00 2001 From: Ryo Nihei Date: Fri, 3 Sep 2021 14:49:37 +0900 Subject: Make semantic actions user-configurable --- cmd/vartan/parse.go | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) (limited to 'cmd') 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) } -- cgit v1.2.3