5 ;;; (c) 2009 Straylight/Edgeware
8 ;;;----- Licensing notice ---------------------------------------------------
10 ;;; This file is part of the Sensible Object Design, an object system for C.
12 ;;; SOD is free software; you can redistribute it and/or modify
13 ;;; it under the terms of the GNU General Public License as published by
14 ;;; the Free Software Foundation; either version 2 of the License, or
15 ;;; (at your option) any later version.
17 ;;; SOD is distributed in the hope that it will be useful,
18 ;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
19 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 ;;; GNU General Public License for more details.
22 ;;; You should have received a copy of the GNU General Public License
23 ;;; along with SOD; if not, write to the Free Software Foundation,
24 ;;; Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26 (cl:in-package #:sod-parser)
28 ;;;--------------------------------------------------------------------------
29 ;;; Token scanner implementation.
31 (defmethod file-location ((place token-scanner-place))
32 (make-file-location (scanner-filename (token-scanner-place-scanner place))
33 (token-scanner-place-line place)
34 (token-scanner-place-column place)))
36 (defmethod shared-initialize :after
37 ((scanner token-scanner) slot-names &key)
38 (declare (ignore slot-names))
39 (scanner-step scanner))
41 (defmethod scanner-at-eof-p ((scanner token-scanner))
42 (with-slots ((type %type)) scanner
45 (defmethod scanner-step ((scanner token-scanner))
46 (with-slots ((type %type) value tail captures line column) scanner
47 (acond ((and tail (token-scanner-place-next tail))
48 (setf type (token-scanner-place-type it)
49 value (token-scanner-place-value it)
50 line (token-scanner-place-line it)
51 column (token-scanner-place-column it)
54 (multiple-value-bind (ty val) (scanner-token scanner)
58 (let ((next (make-token-scanner-place :scanner scanner
62 (setf (token-scanner-place-next tail) next
66 (defmethod scanner-capture-place ((scanner token-scanner))
67 (with-slots ((type %type) value captures tail line column) scanner
70 (setf tail (make-token-scanner-place :scanner scanner
71 :type type :value value
72 :line line :column column)))))
74 (defmethod scanner-restore-place ((scanner token-scanner) place)
75 (with-slots ((type %type) value tail line column) scanner
76 (setf type (token-scanner-place-type place)
77 value (token-scanner-place-value place)
78 line (token-scanner-place-line place)
79 column (token-scanner-place-column place)
82 (defmethod scanner-release-place ((scanner token-scanner) place)
83 (declare (ignore place))
84 (with-slots (captures) scanner
87 ;;;----- That's all, folks --------------------------------------------------