mirror of
https://github.com/johnkerl/miller.git
synced 2026-01-22 18:06:52 +00:00
60 lines
1.7 KiB
Bash
Executable file
60 lines
1.7 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
# ================================================================
|
|
# Reads the Miller DSL grammar file and generates Go code.
|
|
#
|
|
# This is not run on every build / commit / etc.
|
|
#
|
|
# It's intended to be run manually by the developer, as needed when mlr.bnf
|
|
# changes for example.
|
|
#
|
|
# Resulting auto-generated .go files should then be checked into source control.
|
|
#
|
|
# With verbose, *.txt files are created with information about LR1 conflicts
|
|
# etc. Please don't commit them.
|
|
#
|
|
# As of mid-2021 this takes easily 5-10 minutes to run.
|
|
# ================================================================
|
|
|
|
set -euo pipefail
|
|
|
|
verbose="true"
|
|
if [ $# -eq 1 ]; then
|
|
if [ "$1" == "-v" ]; then
|
|
verbose="true"
|
|
elif [ "$1" == "-q" ]; then
|
|
verbose="true"
|
|
fi
|
|
fi
|
|
|
|
# Build the bin/gocc executable (use my fork for performance):
|
|
go install github.com/johnkerl/gocc
|
|
go mod tidy
|
|
bingocc="$HOME/go/bin/gocc"
|
|
if [ ! -x "$bingocc" ]; then
|
|
exit 1
|
|
fi
|
|
|
|
rm -f pkg/parsing/*.txt
|
|
if [ "$verbose" = "true" ]; then
|
|
lr1="pkg/parsing/LR1_conflicts.txt"
|
|
$bingocc -v -o ./pkg/parsing -p mlr/pkg/parsing pkg/parsing/mlr.bnf || expand -2 $lr1
|
|
else
|
|
$bingocc -o ./pkg/parsing -p mlr/pkg/parsing pkg/parsing/mlr.bnf
|
|
fi
|
|
|
|
# Code-gen directories:
|
|
# pkg/parsing/errors/
|
|
# pkg/parsing/lexer/
|
|
# pkg/parsing/parser/
|
|
# pkg/parsing/token/
|
|
# pkg/parsing/util/
|
|
|
|
# Override GOCC codegen with customized error handling
|
|
cp pkg/parsing/errors.go.template pkg/parsing/errors/errors.go
|
|
|
|
# We might need a manual replace of os.ReadFile by ioutil.ReadFile in autogen code. Note we don't
|
|
# use latest-and-greatest Go compiler version in our go.mod since we want to build on Centos which
|
|
# can be trailing-edge in that regard.
|
|
|
|
for x in pkg/parsing/*/*.go; do gofmt -w $x; done
|