wisent: Bison style
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 (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.