4.1.2 Bison style

What we call the Bison style is the traditional style of Bison’s grammars. Compared to iterative style, it is not straightforward to use grammars written in Bison style in Semantic. Mainly because such grammars are designed to parse the whole input data in one pass, and don’t use the iterative parser back-end mechanism (see Iterative style). With Bison style the parser is called once to parse the grammar start nonterminal.

The following example is a snippet of the Bison style Java grammar provided in the Semantic distribution in the file semantic/wisent/java.wy.

%start formal_parameter
…

formal_parameter_list
  : formal_parameter_list COMMA formal_parameter
    (cons $3 $1)
  | formal_parameter
    (list $1)
  ;

formal_parameter
  : formal_parameter_modifier_opt type variable_declarator_id
    (EXPANDTAG
     (VARIABLE-TAG $3 $2 :typemodifiers $1)
     )
  ;

The first consequence is that syntax errors are not automatically handled by Semantic. Thus, it is necessary to explicitly handle them at the grammar level, providing error recovery rules to skip unexpected input data.

The second consequence is that the iterative parser can’t do automatic tag expansion, except for the start nonterminal value. It is necessary to explicitly expand tags from concerned semantic actions by calling the grammar macro EXPANDTAG with a raw tag as parameter. See also Start nonterminals, for incremental re-parse considerations.