1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- /* The grammar of ISO-Pascal as given by the specification, BS6192: 1982. */
- {
- #include <alloc.h>
- #include <em_arith.h>
- #include <em_label.h>
- #include <em_code.h>
- #include <stb.h>
- #include "LLlex.h"
- #include "def.h"
- #include "f_info.h"
- #include "idf.h"
- #include "main.h"
- #include "node.h"
- #include "scope.h"
- #include "dbsymtab.h"
- }
- %lexical LLlex;
- %start LLparse, Program;
- /* ISO section 6.10, p. 137 */
- Program
- {
- struct def *df;
- arith dummy;
- }:
- ProgramHeading(&df)
- ';' Block(df) '.'
- {
- #ifdef DBSYMTAB
- if (options['g']) {
- C_ms_stb_cst(df->df_idf->id_text, N_MAIN, 0, (arith) 0);
- stb_string(df, D_END);
- }
- #endif /* DBSYMTAB */
- }
- | { df = new_def();
- df->df_idf = str2idf(FileName, 1);
- df->df_kind = D_MODULE;
- open_scope();
- GlobalScope = CurrentScope;
- df->prc_vis = CurrVis;
- }
- Module(df, &dummy)
- ;
- ProgramHeading(register struct def **df;):
- PROGRAM IDENT
- { program = *df = new_def();
- (*df)->df_idf = dot.TOK_IDF;
- (*df)->df_kind = D_PROGRAM;
- open_scope();
- GlobalScope = CurrentScope;
- (*df)->prc_vis = CurrVis;
- #ifdef DBSYMTAB
- if (options['g']) stb_string(*df, D_MODULE);
- #endif /* DBSYMTAB */
- }
- [
- '('
- ProgramParameters
- ')'
- { make_extfl(); }
- ]?
- ;
- ProgramParameters
- {
- struct node *Proglist;
- }:
- IdentifierList(&Proglist)
- { EnterProgList(Proglist); }
- ;
|