Peg
Peg, Parsing Expression Grammar, is an implementation of a Packrat parser generator.
Install / Use
/learn @pointlander/PegREADME
PEG, an Implementation of a Packrat Parsing Expression Grammar in Go
A Parsing Expression Grammar ( hence peg) is a way to create grammars similar in principle to regular expressions but which allow better code integration. Specifically, peg is an implementation of the Packrat parser generator originally implemented as peg/leg by Ian Piumarta in C. A Packrat parser is a "descent recursive parser" capable of backtracking and negative look-ahead assertions which are problematic for regular expression engines.
Installation
go install github.com/pointlander/peg@latest
Usage
Build executable
go generate && go build
Help
./peg -h
Example
This creates the file peg.peg.go:
./peg -inline -switch peg.peg
PEG file syntax
Development
Requirements
- Golang, see go.mod for version
- golangci-lint latest version (v2 or later)
- Bash 3.2.x or higher
Generate
Bootstrap and generate grammar *.peg.go. This commands should initially be executed once before other commands.
go generate
Build
go build
(go generate required once beforehand)
Set version
Use the version from the tag if the current commit has a tag. If not use the current commit hash.
go build -ldflags "-X main.Version=$(git describe --tags --exact-match 2>/dev/null || git rev-parse --short HEAD)"
Additionally, since Go 1.18 the go command embeds version control information. Read the information:
go version -m peg
Test
go test -short ./...
(go generate required once beforehand)
Lint
golangci-lint run
(go generate required once beforehand)
Format
golangci-lint fmt
Benchmark
go test -benchmem -bench .
(go generate required once beforehand)
Author
Andrew Snodgrass
Related Skills
node-connect
339.3kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
83.9kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
339.3kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
83.9kCommit, push, and open a PR
