Grail 2 is quite picky about the predicates which can occur in a grammar file and will complain if it finds any of Grail 3's new declarations in a grammar. However, these warnings will not prevent Grail 2 from loading Grail 3 grammars.
i
as continuous in Grail 3, using a
declaration.
continuous(i).
Does not have the same meaning in Grail 2 as it does in Grail 3. In both versions, declaring a mode as continuous will cause Grail to apply the string pair labeling for Lambek calculus proof nets to recursively assign a pair of string positions to each subformula and finally to the atomic formulas. Two atomic formulas can be matched only if these string positions are compatible.
Compared to Grail 2, Grail 3 uses a more powerful mechanism which
allows the user to specify custom_first_order
override
these basic assignments. This allows a Grail 3 grammar to use a
continuous
declaration for a mode which, according to
Grail 2, would not be continuous. In general, the best strategy
to convert a Grail 3 grammar to Grail 2 is to remove all
continuous
declarations for modes which have a
custom_first_order
declaration in Grail 3.
lazy
declaration for this mode, in which case no
contractions are performed until all connections have been made. Grail
3 automatically performs lazy evaluation on all modes, so these
declarations are unnecessary.