Skip to main content

A PEG Parser generator in Go

Project description

⻰OGoPEGo

A PEG parser generator in Go.

⻰OGoPEGo is the Go sibling of 竜TatSu (Python) and 铁修TieXiu (Rust). It is functionally complete and passes the same test suite as its siblings.

Refer to the 竜TatSu documentation for grammar syntax, semantics, and usage. The local SYNTAX.md describes the grammar format.

The CLI tool is a great way to explored the features offered by the library:

$ ogo --help
Usage: ogo <command> [flags]

ogopego: A PEG parser generator in Go

Flags:
  -h, --help             Show context-sensitive help.
  -o, --output=STRING    Output to a file instead of stdout
  -C, --color="auto"     Control colorized output for API results
  -t, --trace            Display a detailed trace of the parsing process
  -v, --version          Print version information

Commands:
  run <grammar> <inputs> ... [flags]
    Execute a grammar against one or more input files

  boot [flags]
    The internal boot grammar

  grammar <grammar> [flags]
    Grammar transformations

Run "ogo <command> --help" for more information on a command.

Installation

go install github.com/neogeny/ogopego/cmd/ogo@latest

Python

There's a Python package that provides an out-of-process integration with ⻰OGoPEGo. The package provides a Python API that allows you to compile grammars and parse input using the Go implementation of the PEG parser generator. The package is available on PyPI as ogopego and can be installed with:

pip install ogopego

After installation the command-line executable becomes available as ogo.

ogo --help

For the Python API please take a look at the documentation in the docs directory.

Library API

import "github.com/neogeny/ogopego/api"

// Compile a grammar string into a Grammar object.
g, err := api.Compile(grammar, cfg)

// Parse input with a compiled Grammar.
tree, err := api.ParseInput(g, input, cfg)

// Compile and parse in one step.
tree, err := api.ParseGrammar(grammar, cfg)

// Compile to JSON-compatible output.
json, err := api.CompileToJSON(grammar, cfg)

// Parse input to JSON-compatible output.
json, err := api.ParseInputToJSON(g, input, cfg)

// JSON roundtrip via peg package.
jsonStr := peg.SerializeGrammar(g)
g2, err := peg.ParseGrammar([]byte(jsonStr))

Grammar object

import "github.com/neogeny/ogopego/peg"

// A compiled grammar. Create one with api.Compile.
type Grammar struct {
    Name       string            // grammar name
    Directives *asjson.OrderedMap // @@directives
    Keywords   []string           // @@keyword declarations
    Rules      []*Rule            // grammar rules
    Analyzed   bool               // true after Initialize()
}

// Parse input text with this grammar (use api.ParseInput).
result, err := api.ParseInput(g, text, cfg)

// Prepare grammar for parsing (link rules, detect left recursion).
err := g.Initialize()

// Serialize.
jsonStr := g.AsJSONStr()             // indented JSON
jsonStr := peg.SerializeGrammar(g)   // clean JSON (recommended)
data, err := peg.ParseGrammar([]byte(jsonStr))  // deserialize

// Display.
fmt.Println(g.PrettyPrint())    // EBNF pretty-print
fmt.Println(g.Railroads())      // railroad diagram

Features

  • Out-of-process integration for Python is complete.
  • Generation of source code with an object model for deifinitions in the grammar is complete. The model generator defines the types specified in the input grammar and creates the transformation from the Tree result of a call to Parse() to the object model.
  • Code generation of a parser recently moved in 竜TatSu to the loading of a model of the Grammar and using it as parser. ⻰OGoPEGo is cabable of generating a model of the Grammar constructor for a grammar that can be compiled by Go for blazing boot times.
  • ⻰OGoPEGo also knows how to load fast a Grammar model from 竜TatSu-format JSON.
  • Semantic actions (transformations) during parse are implemented through a SemanticsFunc(Tree) Tree configuration entry. Transformations are limited to Tree->Tree, so a walker must be used as post-processor if a different AST type is desidred. The AST model generation available through the CLI tool generates such a walker.
  • Interpolation and evaluation of `constant` expressions hasn't had any known use cases with 竜TatSu. They will not be implemented in ⻰OGoPEGo until a use case appears.

License

Licensed under the Apache License, Version 2.0 (LICENSE or http://www.apache.org/licenses/LICENSE-2.0).

Contribution

Unless explicitly stated otherwise, any contribution intentionally submitted for inclusion in the work, as defined in the Apache-2.0 license, shall be licensed as above, without any additional terms or conditions.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ogopego-0.1.9.tar.gz (143.0 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

ogopego-0.1.9-py3-none-win_amd64.whl (15.1 kB view details)

Uploaded Python 3Windows x86-64

ogopego-0.1.9-py3-none-manylinux_2_28_x86_64.whl (3.1 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ x86-64

ogopego-0.1.9-py3-none-macosx_11_0_arm64.whl (3.0 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

File details

Details for the file ogopego-0.1.9.tar.gz.

File metadata

  • Download URL: ogopego-0.1.9.tar.gz
  • Upload date:
  • Size: 143.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for ogopego-0.1.9.tar.gz
Algorithm Hash digest
SHA256 88a97ad9e60c4d06fa41a1b3ec1bf40c22035789fd4e38b05463186c99303b07
MD5 e16d1f552d092ad0382f759c37c88b52
BLAKE2b-256 5508f5803970835b4e7b20799d216e7d56d99d6763dc5bf9f1b83a067221d13e

See more details on using hashes here.

Provenance

The following attestation bundles were made for ogopego-0.1.9.tar.gz:

Publisher: publish.yml on neogeny/ogopego

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ogopego-0.1.9-py3-none-win_amd64.whl.

File metadata

  • Download URL: ogopego-0.1.9-py3-none-win_amd64.whl
  • Upload date:
  • Size: 15.1 kB
  • Tags: Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for ogopego-0.1.9-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 1e8ecb3e4d562001a4862e9cf20375dc35db6ef633d413fe1ab55082ae5e33d8
MD5 0a3568b7d12cd2caf43bcf2e488da33c
BLAKE2b-256 6d018a1bfca2e49d31bcdfb3de980c50a2d00508bab3ef0b9f7e4f38369f0795

See more details on using hashes here.

Provenance

The following attestation bundles were made for ogopego-0.1.9-py3-none-win_amd64.whl:

Publisher: publish.yml on neogeny/ogopego

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ogopego-0.1.9-py3-none-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for ogopego-0.1.9-py3-none-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 23922205334cd1549447c13e564f83a49f2297122d1950daf90512846f3eea2e
MD5 e83a97c95e3a866531a930ccda922d22
BLAKE2b-256 13118a4da9a935bbe3bd3c7b9d6bac2f6deefe338daf7239fb6ec62c85a69c2f

See more details on using hashes here.

Provenance

The following attestation bundles were made for ogopego-0.1.9-py3-none-manylinux_2_28_x86_64.whl:

Publisher: publish.yml on neogeny/ogopego

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ogopego-0.1.9-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for ogopego-0.1.9-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 32f853753905618e32e21f95e7b02006b1a928b359bace75052ed33d621e8e11
MD5 7e44f0c88ac5639d6772c96f137b9f76
BLAKE2b-256 619a67dcbeb6f81b89168c2a5c60b5b531b7a39bfd82fe0d0548855fb7d22b81

See more details on using hashes here.

Provenance

The following attestation bundles were made for ogopego-0.1.9-py3-none-macosx_11_0_arm64.whl:

Publisher: publish.yml on neogeny/ogopego

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page