about summary refs log tree commit diff
path: root/third_party/lisp/npg/README
blob: a1661e744a37be6e81bb94466de285cd677a59a4 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48

		     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.