GitHub - pointlander/peg: Peg, Parsing Expression Grammar, is an implementation of a Packrat parser generator. (original) (raw)

PEG, an Implementation of a Packrat Parsing Expression Grammar in Go

Go Reference Go Report Card

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

Help

Example

This creates the file peg.peg.go:

./peg -inline -switch peg.peg

PEG file syntax

See peg-file-syntax.md

Development

Requirements

Generate

Bootstrap and generate grammar *.peg.go. This commands should initially be executed once before other commands.

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:

Test

(go generate required once beforehand)

Lint

(go generate required once beforehand)

Format

Benchmark

go test -benchmem -bench .

(go generate required once beforehand)

Author

Andrew Snodgrass