Awesome Go

peg

CategorySoftware Packages
SubcategoryOther Software
Stars1,118

Peg, Parsing Expression Grammar, is an implementation of a Packrat parser generator

About peg

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.

PEG file syntax

See peg-file-syntax.md for creating your own *.peg file.

Usage

  1. Add peg as a tool dependency

    go get -tool github.com/pointlander/peg@main
    
  2. Create your mygrammar.peg

  3. Add a //go:generate line in a Go source of your package

    //go:generate go tool peg mygrammar.peg
    

    Widespread community design pattern: Add lines like this in doc.go.

  4. Generate mygrammar.peg.go from mygrammar.peg

    go generate
    

Example

This creates the file peg.peg.go

go tool peg -inline -switch peg.peg

Help

go tool peg -h

Development

Requirements

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

Frequently Asked Questions

What is peg?

peg is a Software Packages library for the Go programming language. Peg, Parsing Expression Grammar, is an implementation of a Packrat parser generator

How many GitHub stars does peg have?

peg has 1,118 GitHub stars in the directory's latest synchronization.

How do I install peg?

Install peg with the Go module system using `go get pointlander/peg`. Check the repository for the current installation instructions.

What category does peg belong to?

peg is listed under Software Packages, specifically Other Software.

← Back to Other Software