Used http://wcp.sdf-eu.org/software/npg-20150517T144652.tbz (sha256 42e88f6067128fbdb3a3d578371c9b0ee2a34f1d36daf80be8a520094132d828). There's no upstream repository nor a release since 2015, so importing seems to make a lot of sense. Since we can't subtree making any depot-related changes in a separate CL -- this is only the source import. Change-Id: I64c984ca0a84b9e48c6f496577ffccce1d7bdceb Reviewed-on: https://cl.tvl.fyi/c/depot/+/3377 Tested-by: BuildkiteCI Reviewed-by: grfn <grfn@gws.fyi>
		
			
				
	
	
		
			79 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			Common Lisp
		
	
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			Common Lisp
		
	
	
	
	
	
| ;;;  common.lisp --- common stuff
 | |
| 
 | |
| ;;;  Copyright (C) 2003-2006, 2009 by Walter C. Pelissero
 | |
| 
 | |
| ;;;  Author: Walter C. Pelissero <walter@pelissero.de>
 | |
| ;;;  Project: NPG a Naive Parser Generator
 | |
| 
 | |
| #+cmu (ext:file-comment "$Module: common.lisp $")
 | |
| 
 | |
| ;;; 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
 | |
| 
 | |
| (in-package :naive-parser-generator)
 | |
| 
 | |
| (eval-when (:compile-toplevel :load-toplevel)
 | |
|   (defstruct grammar
 | |
|     rules
 | |
|     keywords
 | |
|     equal-p)
 | |
| 
 | |
|   (defstruct rule
 | |
|     name
 | |
|     productions)
 | |
| 
 | |
|   (defstruct (production (:conc-name prod-))
 | |
|     tokens
 | |
|     (tokens-length 0 :type fixnum)
 | |
|     action)
 | |
| 
 | |
|   (defstruct token
 | |
|     type		     ; type of token (identifier, number, ...)
 | |
|     value				; its actual value
 | |
|     position)			     ; line/column in the input stream
 | |
|   ) ; eval-when
 | |
| 
 | |
| (defmethod print-object ((obj rule) stream)
 | |
|   (format stream "#R(~A)" (rule-name obj)))
 | |
| 
 | |
| (defmethod print-object ((obj production) stream)
 | |
|   (format stream "#P(action: ~S)" (prod-action obj)))
 | |
| 
 | |
| (defmethod print-object ((obj token) stream)
 | |
|   (format stream "#T:~A=~S" (token-type obj) (token-value obj)))
 | |
| 
 | |
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 | |
| 
 | |
| (declaim (inline make-rules-table find-rule add-rule))
 | |
| 
 | |
| (defun make-rules-table ()
 | |
|   (make-hash-table))
 | |
| 
 | |
| (defun find-rule (rule-name rules)
 | |
|   (gethash rule-name rules))
 | |
| 
 | |
| (defun add-rule (rule-name rule rules)
 | |
|   (setf (gethash rule-name rules) rule))
 | |
| 
 | |
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 | |
| 
 | |
| (declaim (inline make-keywords-table find-keyword add-keyword))
 | |
| 
 | |
| (defun make-keywords-table ()
 | |
|    (make-hash-table :test 'equal))
 | |
| 
 | |
| (defun find-keyword (keyword-name keywords)
 | |
|   (gethash keyword-name keywords))
 | |
| 
 | |
| (defun add-keyword (keyword keywords)
 | |
|   (setf (gethash keyword keywords) t))
 |