home *** CD-ROM | disk | FTP | other *** search
- .SH
- Section 6R: The Ratfor Language Yacc Environment
- .PP
- For reasons of portability or compatibility with existing
- software, it may be desired to use Yacc to generate parsers
- in Ratfor, or, by extension, in portable Fortran.
- The user is likely to work considerably harder doing this
- than he might if he were to use C.
- .PP
- When the user inputs a specification to Yacc, and specifies the Ratfor option (see Appendix B), the
- output is a file of Ratfor programs called ``y.tab.r''.
- These programs are then compiled,
- and provide the desired subroutine.
- .PP
- The subroutine produced by Yacc which does the input process is an integer function
- called ``yypars''.
- When it is called,
- it in turn repeatedly calls ``yylex'', the lexical analyzer supplied by the user
- (see Section 3).
- Eventually, either an error is detected, in which case (if no error recovery is possible)
- yypars returns the value 1, or the lexical analyzer returns the
- endmarker (type number 0), and the parser accepts.
- In this case, yypars returns 0.
- .PP
- Unlike the C program situation
- (see Section 6C) there is no library
- of Ratfor routines which must be used in the loading process.
- As a side effect of this,
- .ul
- the user must supply a main program which calls yypars.
- A suggested Ratfor main program is
- .DS
- integer yypars
- n = yypars(0)
- if( n .EQ. 0 ) {
- . . . here if the program accepted
- } else {
- . . . here if there were unrecoverable errors
- }
- end
- .DE
- Notice that there is no easy way for the user to get control when
- an error is detected, since the Fortran language provides only
- a very crude character string capability.
- .PP
- There is another feature which the Ratfor user
- might wish to use.
- The argument to yypars is normally 0.
- If it is set to 1, the parser will output a verbose description of its actions,
- including a discussion of which input symbols have been read,
- and what the parser actions are.
- During the input process, the value of this debug flag
- is kept in a common variable yydebu, which
- is available to the actions and may be set and reset at will.
- .PP
- Statement labels 1 through 1000 are reserved for the
- parser, and may not appear in actions; note that, because Ratfor
- has a more modern control structure than Fortran, it is rarely necessary
- to use statement labels at all; the most frequent use of labels in Ratfor is
- in formatted I/O.
- .PP
- Because Fortran has no standard character set
- and not even a standard character width,
- it is difficult to produce a lexical analyzer
- in portable Fortran
- The usual solution is to provide a routine
- which does a table search to get the internal type number for each input character,
- with the understanding that such a routine can be recoded to run far faster for any particular machine.
- .PP
- Finally, we must warn the user that the Ratfor feature of Yacc
- has been operational for a much shorter time than the
- other portions of the system.
- If past experience is any
- guide, the Ratfor support will develop and become more
- powerful and better human engineered in response to user complaints and requirements.
- Thus, the potential Ratfor user might do well to contact
- the author to discuss his own particular needs.
-