nyacc: removed start from lalr-spec -- not needed

This commit is contained in:
Matt Wette 2017-03-05 13:22:51 -08:00 committed by Jan Nieuwenhuizen
parent 2f1e0e6360
commit b43380c8d8
2 changed files with 18 additions and 15 deletions

View file

@ -1,6 +1,6 @@
;;; nyacc/export.scm
;;;
;;; Copyright (C) 2015 Matthew R. Wette
;;; Copyright (C) 2015,2017 Matthew R. Wette
;;;
;;; This library is free software; you can redistribute it and/or
;;; modify it under the terms of the GNU Lesser General Public
@ -20,7 +20,7 @@
lalr->guile
c-char token->bison elt->bison
)
#:use-module ((nyacc lalr) #:select (find-terminal pp-rule))
#:use-module ((nyacc lalr) #:select (find-terminal pp-rule lalr-start))
#:use-module (nyacc lex)
#:use-module (nyacc util)
#:use-module ((srfi srfi-1) #:select (fold))
@ -130,7 +130,7 @@
;; Don't compact tables.
(fmt port "%define lr.default-reduction accepting\n")
;; Provide start symbol.
(fmt port "%start ~A\n%%\n" (elt->bison (assq-ref spec 'start) terms))
(fmt port "%start ~A\n%%\n" (elt->bison (lalr-start spec) terms))
;;
(do ((i 1 (1+ i))) ((= i nrule))
(let* ((lhs (vector-ref lhs-v i)) (rhs (vector-ref rhs-v i)))

View file

@ -29,7 +29,7 @@
#:export-syntax (lalr-spec)
#:export (*nyacc-version*
make-lalr-machine compact-machine hashify-machine
lalr-match-table
lalr-start lalr-match-table
restart-spec add-recovery-logic!
pp-lalr-notice pp-lalr-grammar pp-lalr-machine
write-lalr-actions write-lalr-tables
@ -508,12 +508,12 @@
;; Put most referenced items first, but keep start and rhs-v at
;; top so that if we want to restart (see restart-spec) we can
;; reuse the tail here.
(cons 'start start-symbol)
;;(cons 'start start-symbol) ; use lalr-start, aka rhs-v[0][0]
(cons 'rhs-v (map-attr->vector al 'rhs))
;;
(cons 'restart-tail #t) ; see @code{restart-spec} below
(cons 'non-terms nl)
(cons 'lhs-v (list->vector (reverse ll)))
(cons 'non-terms nl)
(cons 'terminals tl)
(cons 'attr (list
(cons 'expect (or (assq-ref tree 'expect) 0))
@ -522,7 +522,7 @@
(cons 'assc (assq-ref pna 'assc))
(cons 'prp-v (map-attr->vector al 'prec)) ; per-rule precedence
(cons 'act-v (map-attr->vector al 'act))
(cons 'ref-v (map-attr->vector al 'ref))
(cons 'ref-v (map-attr->vector al 'ref)) ; action references
(cons 'err-l err-l)
))))))))
@ -535,14 +535,20 @@
;; vector of vector of right-hand side symbols.
(define *lalr-core* (make-fluid #f))
;; @deffn {Procedure} lalr-start spec => symbol
;; Return the start symbol for the grammar.
;; @end deffn
(define (lalr-start spec)
(vector-ref (vector-ref (assq-ref spec 'rhs-v) 0) 0))
;; This record holds the minimum data from the grammar needed to build the
;; machine from the grammar specification.
(define-record-type lalr-core-type
(make-lalr-core non-terms terminals start lhs-v rhs-v eps-l)
;;(make-lalr-core non-terms terminals start lhs-v rhs-v eps-l)
(make-lalr-core non-terms terminals lhs-v rhs-v eps-l)
lalr-core-type?
(non-terms core-non-terms) ; list of non-terminals
(terminals core-terminals) ; list of non-terminals
(start core-start) ; start non-terminal
(lhs-v core-lhs-v) ; vec of left hand sides
(rhs-v core-rhs-v) ; vec of right hand sides
(eps-l core-eps-l)) ; non-terms w/ eps prod's
@ -551,7 +557,6 @@
(define (make-core spec)
(make-lalr-core (assq-ref spec 'non-terms)
(assq-ref spec 'terminals)
(assq-ref spec 'start)
(assq-ref spec 'lhs-v)
(assq-ref spec 'rhs-v)
'()))
@ -561,10 +566,9 @@
(define (make-core/extras spec)
(let ((non-terms (assq-ref spec 'non-terms))
(terminals (assq-ref spec 'terminals))
(start (assq-ref spec 'start))
(lhs-v (assq-ref spec 'lhs-v))
(rhs-v (assq-ref spec 'rhs-v)))
(make-lalr-core non-terms terminals start lhs-v rhs-v
(make-lalr-core non-terms terminals lhs-v rhs-v
(find-eps non-terms lhs-v rhs-v))))
@ -1532,9 +1536,9 @@
;; len-v - rule lengths
;; rto-v - hashed lhs symbols (rto = reduce to)
;; to print itemsets need:
;; kis-v - itemsets
;; lhs-v - left hand sides
;; rhs-v - right hand sides
;; kis-v - itemsets
;; pat-v - action table
;; @deffn restart-spec [spec|mach] start => spec
@ -1545,8 +1549,7 @@
(define (restart-spec spec start)
(let* ((rhs-v (vector-copy (assq-ref spec 'rhs-v))))
(vector-set! rhs-v 0 (vector start))
(cons* (cons 'start start)
(cons 'rhs-v rhs-v)
(cons* (cons 'rhs-v rhs-v)
(member '(restart-tail . #t) spec))))
;; @deffn make-lalr-machine spec => pgen