New Features of Eli Version 4.1
The modifications of the Lido language and the Liga system refer to the following topics: The use of symbol computations is further simplified by removal of certain restrictions, and by introduction of some new constructs. Some restrictions on bottom-up evaluation are removed. A mechanism has been installed such that messages given by the C compiler on the generated evaluator are related back to the Lido text.
None of the modifications invalidates existing Lido specifications.
If a symbol computation contains a CONSTITUENTS construct, like
CLASS SYMBOL CS COMPUTE SYNT.c = f (CONSTITUENTS X.a WITH (t, f2, f1, f0)); END;it was not allowed to inherit CS to a symbol that has a production with an empty right-hand side. It was also a violation if X were a CLASS symbol that is not inherited to any symbol. This was sometimes annoying, especially when using library modules.
Both restrictions have been removed. The result of the CONSTITUENTS
is in such cases the result of the
It was a violation if a computation containing a TAIL chain access is inherited to a symbol that has a production with an empty right-hand side. A HEAD computation was dropped in such cases. This was sometimes annoying, especially when using library modules. This restriction has been removed.
Now, if a computation that contains a CHAINSTART, HEAD, or TAIL is inherited to a rule with an empty right-hand side, its effect is as if there was a symbol on the right-hand side that passes the chain unchanged.
CLASS SYMBOL ROOTCLASS END;is predefined without any computation. It is inherited to the particular root symbol of the tree grammar.
This facility is especially useful for writing grammar independent modules which need to associate computations to the grammar root. Module users then do not need to explicitly inherit a root role.
CLASS SYMBOL LeafNode COMPUTE SYNT.Ptg = TermFct ("ToPtg", TERM); END; SYMBOL LiteralExpr INHERITS LeafNode END;
If there were the following two rules for
RULE: LiteralExpr ::= IntNumber COMPUTE LiteralExpr.Ptg = ToPtgIntNumber (IntNumber); END; RULE: LiteralExpr ::= FloatNumber COMPUTE LiteralExpr.Ptg = ToPtgFloatNumber (FloatNumber); END;Suitable functions have to be defined for the calls constructed by prefixing the terminal name with the string given in the
A call of the predefined function
Liga's strategy for scheduling
computed during the tree construction phase only if they are needed for
Information about the results of Liga's analysis for
The restrictions on
Furthermore, chain productions may be introduced into the tree grammar,
if necessary, without having corresponding chain productions in the
concrete grammar, as long as they are not involved in