wisent: Compiling a grammar

 
 2.3 Compiling a grammar
 =======================
 
 After providing a context-free grammar in a suitable format, it must be
 translated into a set of tables (an “automaton”) that will be used to
 derive the parser.  Like Bison, Wisent translates grammars that must be
 “LALR(1)”.
 
    A grammar is LALR(1) if it is possible to tell how to parse any
 portion of an input string with just a single token of look-ahead: the
 “look-ahead token”.  See See(bison)Language and Grammar, in the
 Bison manual for more information.
 
    Grammar translation (compilation) is achieved by the function:
 
  -- Function: wisent-compile-grammar grammar &optional start-list
      Compile GRAMMAR and return an LALR(1) automaton.
 
      Optional argument START-LIST is a list of start symbols
      (nonterminals).  If ‘nil’ the first nonterminal defined in the
      grammar is the default start symbol.  If START-LIST contains only
      one element, it defines the start symbol.  If START-LIST contains
      more than one element, all are defined as potential start symbols,
      unless ‘wisent-single-start-flag’ is non-‘nil’.  In that case the
      first element of START-LIST defines the start symbol and others are
      ignored.
 
      The LALR(1) automaton is a vector of the form:
 
      ‘[ACTIONS GOTOS STARTS FUNCTIONS]’
 
      ACTIONS
           A state/token matrix telling the parser what to do at every
           state based on the current look-ahead token.  That is shift,
           reduce, accept or error.  See also SeeWisent Parsing.
 
      GOTOS
           A state/nonterminal matrix telling the parser the next state
           to go to after reducing with each rule.
 
      STARTS
           An alist which maps the allowed start symbols (nonterminals)
           to lexical tokens that will be first shifted into the parser
           stack.
 
      FUNCTIONS
           An obarray of semantic action symbols.  A semantic action is
           actually an Emacs Lisp function (lambda expression).