42 lines
1.9 KiB
Text
42 lines
1.9 KiB
Text
|
|
||
|
NPG a Naive Parser Generator
|
||
|
for Common Lisp
|
||
|
|
||
|
Copyright (C) 2003-2006, 2010 by Walter C. Pelissero
|
||
|
|
||
|
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 file is provided.
|
||
|
|
||
|
See the examples directory for clues on how to use it.
|