12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- .sp 1.5i
- .nr H1 7
- .NH
- Hints to change the standard
- .nh
- .sp
- .LP
- We encoutered some difficulties when the compiler was developed. In this
- chapter some hints are presented to change the standard, which would make
- the implementation of the compiler less difficult. The semantics of Pascal
- would not be altered by these adaptions.
- .sp 2
- .LP
- \- Some minor changes in the grammar of Pascal from the user's point of view,
- but which make the writing of an LL(1) parser considerably easier, could be:
- .in +3m
- .nf
- field-list : [ ( fixed-part [ variant-part ] | variant-part ) ] .
- fixed-part : record-section \fB;\fR { record-section \fB;\fR } .
- variant-part : \fBcase\fR variant-selector \fBof\fR variant \fB;\fR { variant \fB;\fR } .
- case-statement : \fBcase\fR case-index \fBof\fR case-list-element \fB;\fR { case-list-element \fB;\fR } \fBend\fR .
- .fi
- .in -3m
- .LP
- \- To ease the semantic checking on sets, the principle of qualified sets could
- be used, every set-constructor must be preceeded by its type-identifier:
- .nf
- .ti +3m
- set-constructor : type-identifier \fB[\fR [ member-designator { \fB,\fR member-designator } ] \fB]\fR .
- Example:
- t1 = set of 1..5;
- t2 = set of integer;
- The type of [3, 5] would be ambiguous, but the type of t1[3, 5] not.
- .fi
- .LP
- \- Another problem arises from the fact that a function name can appear in
- three distinct 'use' contexts: function call, assignment of function
- result and as function parameter.
- .br
- Example:
- .in +5m
- .nf
- \fBprogram\fR function_name;
- \fBfunction\fR p(x : integer; function y : integer) : integer;
- \fBbegin\fR .. \fBend\fR;
- \fBfunction\fR f : integer;
- \fBbegin\fR
- f := p(f, f); (*)
- \fBend\fR;
- \fBbegin\fR .. \fBend\fR.
- .fi
- .in -5m
- A possible solution in case of a call (also a procedure call) would be to
- make the (possibly empty) actual-parameter-list mandatory. The assignment
- of the function result could be changed in a \fIreturn\fR statement.
- Though this would change the semantics of the program slightly.
- .br
- The above statement (*) would look like this: return p(f(), f);
- .LP
- \- Another extension to the standard could be the implementation of an
- \fIotherwise\fR clause in a case-statement. This would behave exactly like
- the \fIdefault\fR clause in a switch-statement in C.
- .bp
|