fucc で LL(1)
fucc の作者にメールを出したらちゃんと答えが返ってきた。fucc のサンプルももらった。
#-:fucc-generator (asdf:operate 'asdf:load-op :fucc-generator) #-:fucc-parser (asdf:operate 'asdf:load-op :fucc-parser) (in-package :fucc-generator) (defun make-lexer (list) (let ((list (copy-list list))) (lambda (&rest ignore) (let ((atom (pop list))) (values atom atom))))) ;;; You should use this macro: (fucc:defparser *test* s (a b c) ((s -> k l (:call #'list)) (k -> a b (:call #'list)) (l -> a c (:call #'list))) :type :LL) ;;; Usage: (setf result (fucc:parser-ll (make-lexer '(a b a c)) *test*)) (format t "~a~%" result) ;;;