Change-Id: I9f987dc25d77a829cc0716cbe4cb1b91c36de861 Reviewed-on: https://cl.tvl.fyi/c/depot/+/3269 Tested-by: BuildkiteCI Reviewed-by: grfn <grfn@gws.fyi>
		
			
				
	
	
		
			48 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			48 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
 | 
						|
		     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.
 |