@@ -11,11 +11,12 @@ import (
11
11
"unicode"
12
12
13
13
"github.com/MakeNowJust/heredoc/v2"
14
+ "github.com/k0kubun/pp/v3"
15
+
14
16
"github.com/cloudspannerecosystem/memefish"
15
17
"github.com/cloudspannerecosystem/memefish/ast"
16
18
"github.com/cloudspannerecosystem/memefish/token"
17
19
"github.com/cloudspannerecosystem/memefish/tools/util/poslang"
18
- "github.com/k0kubun/pp/v3"
19
20
)
20
21
21
22
var usage = heredoc .Doc (`
@@ -29,6 +30,10 @@ var usage = heredoc.Doc(`
29
30
Show the parse result of "SELECT 1 AS X".
30
31
$ go run ./tools/parse/main.go -mode expr "(SELECT 1) + 2"
31
32
Parse "(SELECT 1) + 2" on the expression mode.
33
+ $ go run ./tools/parse/main.go -mode expr --output unparse "(SELECT 1) + 2"
34
+ Parse "(SELECT 1) + 2" on the expression mode and show only unparsed SQL.
35
+ $ go run ./tools/parse/main.go -mode expr --output ast "(SELECT 1) + 2"
36
+ Parse "(SELECT 1) + 2" on the expression mode and show only AST.
32
37
$ go run ./tools/parse/main.go -pos "Query.end" "SELECT 1 AS x"
33
38
Evaluate the POS expression "Query.end" on "SELECT 1 AS x"
34
39
$ go run ./tools/parse/main.go -pos "As.end" -dig "Query.Results.0" "SELECT 1 AS x"
42
47
logging = flag .Bool ("logging" , false , "enable log (default: false)" )
43
48
dig = flag .String ("dig" , "" , "digging the result node before printing" )
44
49
pos = flag .String ("pos" , "" , "POS expression" )
50
+ output = flag .String ("output" , "ast,unparse" , "comma separated outputs: {ast|unparse}" )
45
51
)
46
52
47
53
func main () {
@@ -124,16 +130,22 @@ func main() {
124
130
}
125
131
}
126
132
127
- fmt .Println ("--- AST" )
128
- pprinter := pp .New ()
129
- pprinter .SetOmitEmpty (true )
130
- _ , _ = pprinter .Println (node )
131
- fmt .Println ()
132
-
133
- fmt .Println ("--- SQL" )
134
- fmt .Println (node .SQL ())
133
+ for _ , elem := range strings .Split (* output , "," ) {
134
+ switch elem {
135
+ case "ast" :
136
+ fmt .Println ("--- AST" )
137
+ pprinter := pp .New ()
138
+ pprinter .SetOmitEmpty (true )
139
+ _ , _ = pprinter .Println (node )
140
+ case "unparse" :
141
+ fmt .Println ("--- SQL" )
142
+ fmt .Println (node .SQL ())
143
+ }
144
+ }
135
145
136
146
if * pos != "" {
147
+ fmt .Println ()
148
+
137
149
fmt .Println ("--- POS" )
138
150
139
151
expr , err := poslang .Parse (* pos )
0 commit comments