Skip to content

Commit

Permalink
Enhancements to zql parser test tool (#414)
Browse files Browse the repository at this point in the history
A few enhancements to the repl wrapper around the zql parser (aka, the
thing that is executed when you run "make -C zql run").  No zql/zq/zqd
functional changes.

 - enable history
 - enable alternate parser entry points, set by typing "_target foo", eg:
   > _target Expression
   > x + 1
   Go raw result:
   &{{BinaryExpr} ...}
  • Loading branch information
aswan committed Mar 12, 2020
1 parent 74db7c7 commit 6cbd6d2
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 29 deletions.
4 changes: 3 additions & 1 deletion zql/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ PEGJS_INSTALLED = $(shell test -x $(PEGJS) && $(PEGJS) --version)
PIGEON_INSTALLED = $(shell test -d $(deps) && (cd $(deps); go list -m -f {{.Version}} github.com/mna/pigeon || echo ""))
GOIMPORTS_INSTALLED = $(shell test -d $(deps) && (cd $(deps); go list -m -f {{.Version}} golang.org/x/tools || echo ""))

PEGJS_ARGS = --allowed-start-rules start,Expression

all: zql.go zql.js

run: all
Expand Down Expand Up @@ -52,4 +54,4 @@ zql.go: $(PIGEON) $(GOIMPORTS)

.PHONY: zql.js
zql.js: $(PEGJS)
cpp -E -P zql.peg | $(PEGJS) -o $@
cpp -E -P zql.peg | $(PEGJS) $(PEGJS_ARGS) -o $@
14 changes: 12 additions & 2 deletions zql/main/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,10 @@ import (
"github.com/peterh/liner"
)

var target = "start"

func runGo(line string) error {
got, err := zql.Parse("", []byte(line))
got, err := zql.Parse("", []byte(line), zql.Entrypoint(target))
if err != nil {
return err
}
Expand All @@ -27,7 +29,7 @@ func runGo(line string) error {
}

func runJs(line string) error {
cmd := exec.Command("node", "./main/main.js")
cmd := exec.Command("node", "./main/main.js", "-e", target)
cmd.Stdin = strings.NewReader(line)
out, err := cmd.Output()
if err != nil {
Expand All @@ -38,7 +40,14 @@ func runJs(line string) error {
return nil
}

const targetCmd = "_target "

func parse(line string) {
if strings.HasPrefix(line, targetCmd) {
target = line[len(targetCmd):]
return
}

if err := runGo(line); err != nil {
fmt.Println("go error:", err)
}
Expand All @@ -58,6 +67,7 @@ func iteractive() {
if err != nil {
log.Fatal(err)
}
rl.AppendHistory(line)
parse(line)
}
}
Expand Down
40 changes: 15 additions & 25 deletions zql/main/main.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
'use strict';

const fs = require('fs');

const zql = require('../zql')

let startRule = 'start';

function show(obj) {
console.log(JSON.stringify(obj, null, 4));
}
Expand All @@ -14,40 +15,29 @@ function wrap(e) {

function parse_query(line) {
try {
return zql.parse(line);
return zql.parse(line, {startRule});
} catch (e) {
return wrap(e);
}
}

function parse_cli(line) {
try {
return zql.parse(line);
} catch (e) {
// XXX do nothing
}
return undefined;
}

function parse(src) {
let ast = parse_cli(src);
if (!ast) {
ast = parse_query(src);
}
return ast;
}

let filename = '/dev/stdin';
let argv = process.argv;
if (argv.length === 3) {
filename = argv[2];
let argv = process.argv.slice(2);

while (argv.length > 0) {
if (argv[0] === "-e" && argv.length > 1) {
startRule = argv[1];
argv = argv.slice(2);
} else {
filename = argv.shift();
}
}

let boom_src;
let zql_src;
try {
boom_src = fs.readFileSync(filename, 'utf8');
zql_src = fs.readFileSync(filename, 'utf8');
} catch (e) {
show(wrap(e));
process.exit(1);
}
show(parse(boom_src));
show(parse_query(zql_src));
10 changes: 9 additions & 1 deletion zql/zql.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 6cbd6d2

Please sign in to comment.