Skip to main content

A parse tree generator for extended Backus-Naur form.

Project description

Parse EBNF

PyPI - Version PyPI - Python Version


Table of Contents

Introduction

A simple and hacky parser for EBNF as defined by ISO. Give it an EBNF string and it'll generate a parse tree. Note that this package does not parse the described grammar.

Installation

pip install parse-ebnf

Quick start

from parse_ebnf.parsing import ParsingError, parse_file

try:
    #Your EBNF file goes here.
    pt = parse_file(ebnf_path)
    partial = False
except ParsingError as e:
    #If an exception occurs, a partial tree is generated. See the docs for
    #details.
    pt = e.parser.pt
    partial = True

#Prints the text that the tree was parsed from.
print(str(pt))
#Prints a debug view of the tree.
print(repr(pt))

print(f'Parsing the file created a tree with {pt.count} nodes.')
print(f'The tree has a height of {pt.height}.')
print(f'Each node in the tree has at MOST {pt.maxDegree} children.')

def DepthFirst(node, partial, func):
    #Partial nodes are in a mostly undefined state.
    if not partial: func(node)
    for child in node.children:
        #If a node is partial, then its last child is partial. All other
        #children are not partial.
        if partial and child is node.children[-1]:
            DepthFirst(child, True, func)
        else:
            DepthFirst(child, False, func)

#This will visit each node in the parse tree and print the line where its
#text begins.
DepthFirst(pt.root, partial, lambda node: print(node.startLine))

from parse_ebnf.nodes import Comment

#Finds each comment in the file and prints its text content.
for child in pt.root.children:
    if isinstance(child, Comment):
        #A tree being partial means that its root is partial.
        if partial and child is pt.root.children[-1]: continue
        print(str(child))

Documentation

Check the github page that holds the documentation.

License

parse-ebnf is distributed under the terms of the MIT license.

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

parse_ebnf-2.0.2.tar.gz (26.9 kB view details)

Uploaded Source

Built Distribution

parse_ebnf-2.0.2-py3-none-any.whl (13.4 kB view details)

Uploaded Python 3

File details

Details for the file parse_ebnf-2.0.2.tar.gz.

File metadata

  • Download URL: parse_ebnf-2.0.2.tar.gz
  • Upload date:
  • Size: 26.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.9.19

File hashes

Hashes for parse_ebnf-2.0.2.tar.gz
Algorithm Hash digest
SHA256 f87858ac2e0e35c671fd2b3f9e6fb6875020e6c944950450b2523096720411d9
MD5 33ed639a20b7aa0fd82f4a4e571d6b29
BLAKE2b-256 9f094976f84b30dd4df1a4b8d21f85bb5e1de902c0a058dc76d35700f7392d6f

See more details on using hashes here.

File details

Details for the file parse_ebnf-2.0.2-py3-none-any.whl.

File metadata

  • Download URL: parse_ebnf-2.0.2-py3-none-any.whl
  • Upload date:
  • Size: 13.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.9.19

File hashes

Hashes for parse_ebnf-2.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 f5357af78ab06cd9a743706092dc24e8edeedcc25517c2994fabca5cfa416dc0
MD5 7d76d62a3442f80d29e954fef5281c37
BLAKE2b-256 ba5fecf329a41e58dfdb2a1378a239db81d2099afb537813392445d8a9c58b01

See more details on using hashes here.

Supported by

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