CL-Yacc is a LALR(1) parser generator for Common Lisp, somewhat like Yacc, GNU Bison, Zebu, lalr.cl or lalr.scm. The latest version of CL-Yacc can be found on the CL-Yacc web page . This manual was written by Juliusz Chroboczek . CL-Yacc exports its symbols from the package yacc : (use-package '#:yacc) A parser consumes the output of a lexer, that produces a stream of terminals. CL-Yacc expects the lexer to be a function of no arguments (a thunk ) that returns two values: the next terminal symbol, and the value of the symbol, which will be passed to the action associated with a production. At the end of the input, the lexer should return nil . A very simple lexer that grabs tokens from a list: (defun list-lexer (list) #'(lambda () (let ((value (pop list))) (if (null value) (values nil nil) (let ((terminal ...