tvl-depot/third_party/lisp/npg/README

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

49 lines
2.2 KiB
Text
Raw Permalink Normal View History

NPG a Naive Parser Generator
for Common Lisp
Copyright (C) 2003-2006, 2010 by Walter C. Pelissero
Copyright (C) 2021 by the TVL Authors
Vendored into depot as it is a dependency of mime4cl and upstream has
become inactive. Upstream and depot version may diverge.
Upstream Website: http://wcp.sdf-eu.org/software/#npg
Vendored Tarball: http://wcp.sdf-eu.org/software/npg-20150517T144652.tbz
This library is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as
published by the Free Software Foundation; either version 2.1 of the
License, or (at your option) any later version. This library is
distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
License for more details. You should have received a copy of the GNU
Lesser General Public License along with this library; if not, write
to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
Boston, MA 02111-1307 USA
This library generates on the fly (no external representation of the
parser is produced) a recursive descent parser based on the grammar
rules you have fed it with. The parser object can then be used to
scan tokenised input. Although a facility to produce a lexical
analiser is not provided, to write such a library is fairly easy for
most languages. NPG parsers require your lexer to adhere to a certain
protocol to be able to communicate with them. Examples are provided
that explain these requirements.
While quite possibly not producing the fastest parsers in town, it's
fairly simple and hopefully easy to debug. It accepts a lispy EBNF
grammar description of arbitrary complexity with the exception of
mutually left recursive rules (watch out, they produce undetected
infinite recursion) and produces a backtracking recursive descent
parser. Immediate left recursive rules are properly simplified,
though.
Multiple concurrent parsers are supported.
To compile, an ASDF and nix file are provided.
See the examples directory for clues on how to use it.