See release notes
APG is an acronym for "ABNF Parser Generator". Originally written to generate parsers directly from ABNF syntax (RFC 5234) it has since grown to include a number of additional features requiring additional syntax terms. The resulting syntax is a superset of ABNF or SABNF. Some features have been primarily developed to support the new apg-exp pattern-matching application. A general description of how APG works is given here.
- Sub-string parsing - the option to parse only a sub-string of the entire input string.
- Positive and negative look around - the ability to look ahead or behind in the string to make parsing decisions based on what is or isn't found.
- Back referencing - phrase matching based on phrases previously matched to other rules or UDTs.
- Beginning and ending of string anchors - parsing decisions based on whether or not the sub-string includes the beginning and/or the ending of the full input string.
- Statistics and limits on the node tree depth and hit count. Recursive-descent parsers can have exponential parsing times for some grammars. Limits can be set to prevent run-away parsing.
- User-Defined Terminals (UDTs). These are user-written code snippets for matching phrases that are difficult or impossible to define with the SABNF syntax. They make for an effectively Turing complete parser.
- The use of callback functions to keep the parser's action code separate from the grammar. User-written callback functions provide complete monitoring and flow control of the parser.
- Generation of Abstract Syntax Trees (ASTs) with optional XML formatting.
- Translation of the AST with user-written callback functions.
- Extensive tracing facility with updated output formatting for easier interpretation.
- Statistics gathering for a full picture of parse tree node coverage.
- Extensive attribute generation for an overview of the grammar's characteristics.
- APG and its parsers run as node.js, desktop cli functions.
- Parsers can easily be used in web page applications with tools such as browserify.
For command line usage:
git clone https://github.com/ldthomas/apg-js2.git apg cd apg npm install -g ./ apg -v
npm install -g apg apg -v
You should see something like:
Note: If there is a name conflict on your system (for example, Automated Password Generator) there are a couple of options for resolving the conflict.
- Make sure that the npm prefix (
npm prefix -g) is left-most in the $PATH variable and clear the cache with
- If the npm prefix is, say,
/my/npm/prefix, create an alias
For the GUI version:
git clone https://github.com/ldthomas/apg-js2.git apg cd apg (double click the apg.html file)
The documentation is in the code in
doccoformat. To generate the documentation, from the package directory:
npm install -g docco ./docco-gen
docs/index.htmlin any web browser to get started. Or view it on the APG website
Copyright © 2017 Lowell D. Thomas, all rights reserved
Released with the BSD-3-Clause license.