miller/go/u/try-parse
2020-10-05 01:02:27 -04:00

107 lines
4.1 KiB
Bash
Executable file

#!/bin/bash
set -euo pipefail
run_mlr() {
# Use just "mlr" for info messages
echo
echo ----------------------------------------------------------------
echo mlr "$@"
./mlr "$@"
}
# With mlr -n put v, we are only parsing the DSL expression into an AST and
# then CST, but not executingit
echo; run_mlr -n put -v '$y = 1 || 2'
echo; run_mlr -n put -v '$y = 1 || 2 || 3'
echo; run_mlr -n put -v '$y = 1 || 2 && 3'
echo; run_mlr -n put -v '$y = 1 && 2 || 3'
echo; run_mlr -n put -v '$y = 1 ? 2 : 3'
echo; run_mlr -n put -v '$y = $a + $b * $c'
echo; run_mlr -n put -v '$y = $a * $b * $c'
echo; run_mlr -n put -v '$y = $a ** $b ** $c'
echo; run_mlr -n put -v '$[2] = 3'
echo; run_mlr -n put -v '$[$y] = 4'
#echo; run_mlr -n put -v '${1} = 4'
echo; run_mlr -n put -v '$x = "abc"'
echo; run_mlr -n put -v '$["abc"] = "def"'
echo; run_mlr -n put -v '$[FILENAME] = FNR'
echo; run_mlr -n put -v '$x = $a + $b + $c'
echo; run_mlr -n put -v '$x = ($a + $b) + $c; $y = $a + ($b + $c); $z = $a + ($b)+ $c'
echo; run_mlr -n put -v '$x = 2 * $a + $b . $c'
echo; run_mlr -n put -v '$x = 2 * $a + ($b . $c)'
echo; run_mlr -n put -v '$x = (NF + NR) * 7; $y = OFS . $y . "hello"'
echo; run_mlr -n put -v '$x = 123. + 1e-2 / .2e3 + 1.e-3'
echo; run_mlr -n put -v '$z=0x7fffffffffffffff + 0x7fffffffffffffff'
echo; run_mlr -n put -v '$z=0x7fffffffffffffff .+ 0x7fffffffffffffff'
echo; run_mlr -n put -v '$z=0x7fffffffffffffff * 0x7fffffffffffffff'
echo; run_mlr -n put -v '$z=0x7fffffffffffffff .* 0x7fffffffffffffff'
echo; run_mlr -n put -v '$z = []'
echo; run_mlr -n put -v '$z = [1,]'
echo; run_mlr -n put -v '$z = [1,2]'
echo; run_mlr -n put -v '$z = [1,2,]'
echo; run_mlr -n put -v '$z = [1,2,3]'
echo; run_mlr -n put -v '$z = [1,2,3,]'
echo; run_mlr -n put -v '$z = {}'
echo; run_mlr -n put -v '$z = {"a":"1"}'
echo; run_mlr -n put -v '$z = {"a":"1",}'
echo; run_mlr -n put -v '$z = {"a":"1", "b":2}'
echo; run_mlr -n put -v '$z = {"a":"1", "b":2,}'
echo; run_mlr -n put -v '$z = {"a":"1", "b":2, "c":3}'
echo; run_mlr -n put -v '$z = {"a":"1", "b":2, "c":3,}'
echo; run_mlr -n put -v '$z = $a[1]'
echo; run_mlr -n put -v '$z = $a["index"]'
echo; run_mlr -n put -v '$z = "abcde"[1]'
echo; run_mlr -n put -v '$z = "abcde"["index"]'
echo; run_mlr -n put -v '$z = $a[1:2]'
echo; run_mlr -n put -v '$z = $a[:2]'
echo; run_mlr -n put -v '$z = $a[1:]'
echo; run_mlr -n put -v '$z = $a[:]'
echo; run_mlr -n put -v '$z = [5,6,7,8,9][1]'
echo; run_mlr -n put -v '$z = {"a":1, "b":2, "c":3}["b"]'
echo; run_mlr -n put -v 'begin{}'
echo; run_mlr -n put -v 'begin{@y=1}'
echo; run_mlr -n put -v 'end{}'
echo; run_mlr -n put -v 'end{@y=1}'
# disallowed run_mlr -n put -v 'begin{}; end {}'
# disallowed run_mlr -n put -v 'begin{@y=1}; $x=2'
echo; run_mlr -n put -v '$x=2; end{@y=1}'
echo; run_mlr -n put -v 'begin{@y=1} $x=2'
echo; run_mlr -n put -v 'begin{} end {}'
echo; run_mlr -n put -v '$x=1;'
echo; run_mlr -n put -v '$x=1;$y=2;'
echo; run_mlr -n put -v 'begin{@x=1;@y=2}'
echo; run_mlr -n put -v 'begin{@x=1;@y=2;}'
echo; run_mlr -n put -v 'begin{@x=1;@y=2;} $z=3'
echo; run_mlr -n put -v 'begin{@x=1;@y=2;} $z=3;'
# disallow in the CST builder
# mlr -n put -v 'begin{end{}}'
echo; run_mlr -n put -v 'if (NR == 1) { $z = 100 }'
echo; run_mlr -n put -v 'if (NR == 1) { $z = 100 } else { $z = 900 }'
echo; run_mlr -n put -v 'if (NR == 1) { $z = 100 } elif (NR == 2) { $z = 200 }'
echo; run_mlr -n put -v 'if (NR == 1) { $z = 100 } elif (NR == 2) { $z = 200 } else { $z = 900 }'
echo; run_mlr -n put -v 'if (NR == 1) { $z = 100 } elif (NR == 2) { $z = 200 } elif (NR == 3) { $z = 300 } else { $z = 900 }'
echo; run_mlr -n put -v 'for (k in $*) { emit { k : k } }'
echo; run_mlr -n put -v 'begin {}'
echo; run_mlr -n put -v 'begin {1}'
echo; run_mlr -n put -v 'end {}'
echo; run_mlr -n put -v 'end {1}'
echo; run_mlr -n put -v 'if (1) {}'
echo; run_mlr -n put -v 'if (1) {2}'
echo; run_mlr -n put -v 'for (k in $*) {}'
echo; run_mlr -n put -v 'for (k in $*) {2}'
echo; run_mlr -n put -v 'while (false) {}'
echo; run_mlr -n put -v 'do {} while (false)'
echo; run_mlr -n put -v 'nr=NR; $nr=nr'
echo; run_mlr -n put -v 'for (i = 0; i < 10; i += 1) { $x += i }'
echo; run_mlr -n put -v 'for (;;) {}'