miller/tools/build-dsl
John Kerl af1adf80ad
Replace GOCC parser-generator with PGPG (#2015)
* Porting

* Update some tests that depend on AST-print output

* iterating on GOCC -> PGPG

* iterating

* iterating

* iterating

* iterating

* iterating

* Modify expout files that need only AST-print-syntax updates

* iterating

* iterating

* iterating

* iterating

* iterating

* iterating

* iterating

* iterating

* iterating

* iterating

* iterating

* sync test cases from mlr-6.17.0, except AST-prints ...

* sync test cases from mlr-6.17.0, except AST-prints ...

* Fix lashed emit for $* and @*

* Fix --1 and ++1 chained unary ops

* Emit with function callsite

* test cases

* dot operator

* M_PI and M_E

* Iterating on lashed emit cases

* error-wording differences

* rm some should-fail files

* Fix issue with leading semicolon

* trailing comma in func params; most AST-print deltas

* error-wording delta

* fix unset all

* AST-print deltas

* go mod tidy: forced `go 1.25` to `go 1.25.0`

* Depend on PGPG v1.0.0

* Fix Windows CI failure

* Remove cmd/experiments/dsl_parser

* GOCC -> PGPG

* neaten

* Fix regex issue found in doc gen
2026-03-15 22:28:57 -04:00

59 lines
1.7 KiB
Bash
Executable file

#!/bin/bash
# ================================================================
# Generate lexer and parser from mlr.bnf using PGPG.
#
# Run from the Miller repo root. Output goes to pkg/parsing/lexer/
# and pkg/parsing/parser/.
# ================================================================
set -euo pipefail
cd "$(dirname "$0")/.."
bnf="pkg/parsing/mlr.bnf"
if [ ! -f "$bnf" ]; then
echo "build-dsl: grammar file not found: $bnf"
exit 1
fi
# Intermediate JSON files (not checked in)
mkdir -p pkg/parsing/gen
lexjson="pkg/parsing/gen/lexer.json"
parsejson="pkg/parsing/gen/parser.json"
echo "build-dsl: generating lexer tables..."
go run github.com/johnkerl/pgpg/go/generators/cmd/lexgen-tables \
-o "$lexjson" \
"$bnf"
echo "build-dsl: generating lexer code..."
go run github.com/johnkerl/pgpg/go/generators/cmd/lexgen-code \
-o pkg/parsing/lexer/lexer.go \
-package lexer \
-type MlrLexer \
"$lexjson"
echo "build-dsl: generating parser tables..."
go run github.com/johnkerl/pgpg/go/generators/cmd/parsegen-tables \
-o "$parsejson" \
"$bnf"
echo "build-dsl: generating parser code..."
go run github.com/johnkerl/pgpg/go/generators/cmd/parsegen-code \
-o pkg/parsing/parser/parser.go \
-package parser \
-type MlrParser \
"$parsejson"
# Remove PGPPG-generated files that are no longer needed
rm -f pkg/parsing/lexer/acttab.go \
pkg/parsing/lexer/transitiontable.go \
pkg/parsing/parser/action.go \
pkg/parsing/parser/actiontable.go \
pkg/parsing/parser/context.go \
pkg/parsing/parser/gototable.go \
pkg/parsing/parser/productionstable.go \
2>/dev/null || true
gofmt -w pkg/parsing/lexer/lexer.go pkg/parsing/parser/parser.go
echo "build-dsl: done."