home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol062 / partb.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1984-04-29  |  16.3 KB  |  467 lines

  1.       LETTER      : GETIDENTIFIER(
  2.                                    (* UPDATING *)  CURRCHAR,
  3.                                                    NEXTCHAR,
  4.                                    (* RETURNING *) NAME,
  5.                                                    VALUE,
  6.                                                    LENGTH    );
  7.       DIGIT       : GETNUMBER(
  8.                                (* UPDATING *)  CURRCHAR,
  9.                                                NEXTCHAR,
  10.                                (* RETURNING *) NAME,
  11.                                                VALUE,
  12.                                                LENGTH    );
  13.       QUOTE       : GETCHARLITERAL(
  14.                                     (* UPDATING *)  CURRCHAR,
  15.                                                     NEXTCHAR,
  16.                                     (* RETURNING *) NAME,
  17.                                                     VALUE,
  18.                                                     LENGTH    );
  19.       OTHERCHAR   : BEGIN
  20.                                GETSPECIALCHAR(
  21.                                        (* UPDATING *)  CURRCHAR,
  22.                                                        NEXTCHAR,
  23.                                        (* RETURNING *) NAME,
  24.                                                        VALUE,
  25.                                                        LENGTH    );
  26.                        IF NAME = OPENCOMMENT
  27.                           THEN
  28.                              GETCOMMENT(
  29.                                          (* UPDATING *) CURRCHAR,
  30.                                                         NEXTCHAR,
  31.                                                         NAME,
  32.                                                         VALUE,
  33.                                                         LENGTH    )
  34.                     END;
  35.       FILEMARK    : NAME := ENDOFFILE
  36.    END (* CASE *)
  37. END; (* GETNEXTSYMBOL *)
  38. PROCEDURE GETSYMBOL(
  39.                      (* UPDATING *)  VAR NEXTSYM   : SYMBOLINFO;
  40.                      (* RETURNING *) VAR CURRSYM   : SYMBOLINFO );
  41. VAR
  42.     DUMMY: SYMBOLINFO;
  43. BEGIN (* GETSYMBOL *)
  44.    DUMMY   := CURRSYM;
  45.    CURRSYM := NEXTSYM;
  46.    NEXTSYM := DUMMY  ;
  47.    WITH NEXTSYM^ DO
  48.       BEGIN
  49.          SKIPSPACES(
  50.                      (* UPDATING *)  CURRCHAR,
  51.                                      NEXTCHAR,
  52.                      (* RETURNING *) SPACESBEFORE,
  53.                                      CRSBEFORE     );
  54.          LENGTH := 0;
  55.          IF CURRSYM^.NAME = OPENCOMMENT
  56.             THEN
  57.                GETCOMMENT(
  58.                            (* UPDATING *)  CURRCHAR,
  59.                                            NEXTCHAR,
  60.                            (* RETURNING *) NAME,
  61.                                            VALUE,
  62.                                            LENGTH    )
  63.             ELSE
  64.                GETNEXTSYMBOL(
  65.                               (* UPDATING *)  CURRCHAR,
  66.                                               NEXTCHAR,
  67.                               (* RETURNING *) NAME,
  68.                                                         VALUE,
  69.                                               LENGTH    )
  70.       END (* WITH *)
  71. END; (* GETSYMBOL *)
  72.  PROCEDURE INT2 ( VAR TOPOFSTACK : INTEGER;
  73.  VAR CURRLINEPOS,
  74.      CURRMARGIN : INTEGER;
  75.  VAR KEYWORD    : KEYWORDTABLE;
  76.  VAR DBLCHARS   : DBLCHRSET;
  77.  VAR DBLCHAR    : DBLCHARTABLE;
  78.  VAR SGLCHAR    : SGLCHARTABLE;
  79.  VAR RECORDSEEN : BOOLEAN;
  80.  VAR CURRCHAR,
  81.      NEXTCHAR   : CHARINFO;
  82.  VAR CURRSYM,
  83.      NEXTSYM    : SYMBOLINFO;
  84.  VAR PPOPTION   : OPTIONTABLE );
  85.  
  86. BEGIN
  87.    WITH PPOPTION [ OFSYM ] DO
  88.       BEGIN
  89.          OPTIONSSELECTED   := [ CRSUPPRESS,
  90.                                 SPACEBEFORE ];
  91.          DINDENTSYMBOLS    := [];
  92.          GOBBLETERMINATORS := []
  93.       END;
  94.    WITH PPOPTION [ FORSYM ] DO
  95.       BEGIN
  96.          OPTIONSSELECTED   := [ SPACEAFTER,
  97.                                 INDENTBYTAB,
  98.                                 GOBBLESYMBOLS,
  99.                                 CRAFTER ];
  100.          DINDENTSYMBOLS    := [];
  101.                                   GOBBLETERMINATORS := [ DOSYM ]
  102.       END;
  103.    WITH PPOPTION [ WHILESYM ] DO
  104.       BEGIN
  105.          OPTIONSSELECTED   := [ SPACEAFTER,
  106.                                 INDENTBYTAB,
  107.                                 GOBBLESYMBOLS,
  108.                                 CRAFTER ];
  109.          DINDENTSYMBOLS    := [];
  110.          GOBBLETERMINATORS := [ DOSYM ]
  111.       END;
  112.    WITH PPOPTION [ WITHSYM ] DO
  113.       BEGIN
  114.          OPTIONSSELECTED   := [ SPACEAFTER,
  115.                                 INDENTBYTAB,
  116.                                 GOBBLESYMBOLS,
  117.                                 CRAFTER ];
  118.          DINDENTSYMBOLS    := [];
  119.          GOBBLETERMINATORS := [ DOSYM ]
  120.       END;
  121.    WITH PPOPTION [ DOSYM ] DO
  122.       BEGIN
  123.          OPTIONSSELECTED   := [ CRSUPPRESS,
  124.                                 SPACEBEFORE ];
  125.          DINDENTSYMBOLS    := [];
  126.          GOBBLETERMINATORS := []
  127.       END;
  128.  
  129.    WITH PPOPTION [ IFSYM ] DO
  130.       BEGIN
  131.          OPTIONSSELECTED   := [ SPACEAFTER,
  132.                                 INDENTBYTAB,
  133.                                              GOBBLESYMBOLS,
  134.                                 CRAFTER ];
  135.          DINDENTSYMBOLS    := [];
  136.          GOBBLETERMINATORS := [ THENSYM ]
  137.       END;
  138.    WITH PPOPTION [ THENSYM ] DO
  139.       BEGIN
  140.          OPTIONSSELECTED   := [ INDENTBYTAB, CRAFTER ];
  141.          DINDENTSYMBOLS    := [];
  142.          GOBBLETERMINATORS := []
  143.       END;
  144.    WITH PPOPTION [ ELSESYM ] DO
  145.       BEGIN
  146.          OPTIONSSELECTED   := [ CRBEFORE,
  147.                                 DINDENTONKEYS,
  148.                                 DINDENT,
  149.                                 INDENTBYTAB,
  150.                                 CRAFTER ];
  151.          DINDENTSYMBOLS    := [ IFSYM,
  152.                                 ELSESYM ];
  153.          GOBBLETERMINATORS := []
  154.       END;
  155.    WITH PPOPTION [ ENDSYM ] DO
  156.       BEGIN
  157.          OPTIONSSELECTED   := [ CRBEFORE,
  158.                                 DINDENTONKEYS,
  159.                                 DINDENT,
  160.                                 CRAFTER ];
  161.          DINDENTSYMBOLS    := [ IFSYM,
  162.                                 THENSYM,
  163.                                 ELSESYM,
  164.                                 FORSYM,
  165.                                 WHILESYM,
  166.                                 WITHSYM,
  167.                                 CASEVARSYM,
  168.                                 COLON,
  169.                                 EQUALS ];
  170.          GOBBLETERMINATORS := []
  171.       END;
  172.    WITH PPOPTION [ UNTILSYM ] DO
  173.       BEGIN
  174.          OPTIONSSELECTED   := [ CRBEFORE,
  175.                                 DINDENTONKEYS,
  176.                                 DINDENT,
  177.                                 SPACEAFTER,
  178.                                 GOBBLESYMBOLS,
  179.                                 CRAFTER ];
  180.          DINDENTSYMBOLS    := [ IFSYM,
  181.                                 THENSYM,
  182.                                 ELSESYM,
  183.                                 FORSYM,
  184.                                 WHILESYM,
  185.                                 WITHSYM,
  186.                                 COLON,
  187.                                 EQUALS ];
  188.          GOBBLETERMINATORS := [ ENDSYM,
  189.                                 UNTILSYM,
  190.                                 ELSESYM,
  191.                                 SEMICOLON ];
  192.       END;
  193.    WITH PPOPTION [ BECOMES ] DO
  194.       BEGIN
  195.          OPTIONSSELECTED   := [ SPACEBEFORE,
  196.                                 SPACEAFTER,
  197.                                 GOBBLESYMBOLS ];
  198.          DINDENTSYMBOLS    := [];
  199.          GOBBLETERMINATORS := [ ENDSYM,
  200.                                 UNTILSYM,
  201.                                 ELSESYM,
  202.                                 SEMICOLON ]
  203.       END;
  204.    WITH PPOPTION [ OPENCOMMENT ] DO
  205.       BEGIN
  206.          OPTIONSSELECTED   := [ CRSUPPRESS ];
  207.          DINDENTSYMBOLS    := [];
  208.           GOBBLETERMINATORS := []
  209.       END;
  210.    WITH PPOPTION [ CLOSECOMMENT ] DO
  211.       BEGIN
  212.          OPTIONSSELECTED   := [ CRSUPPRESS ];
  213.          DINDENTSYMBOLS    := [];
  214.          GOBBLETERMINATORS := []
  215.       END;
  216.    WITH PPOPTION [ SEMICOLON ] DO
  217.       BEGIN
  218.          OPTIONSSELECTED   := [ CRSUPPRESS,
  219.                                 DINDENTONKEYS,
  220.                                 CRAFTER ];
  221.          DINDENTSYMBOLS    := [ IFSYM,
  222.                                 THENSYM,
  223.                                 ELSESYM,
  224.                                 FORSYM,
  225.                                 WHILESYM,
  226.                                 WITHSYM,
  227.                                 COLON,
  228.                                 EQUALS ];
  229.          GOBBLETERMINATORS := []
  230.       END;
  231.    WITH PPOPTION [ COLON ] DO
  232.       BEGIN
  233.          OPTIONSSELECTED   := [ SPACEAFTER, 
  234.                 INDENTTOCLP ];
  235.          DINDENTSYMBOLS    := [];
  236.          GOBBLETERMINATORS := []
  237.       END;
  238.    WITH PPOPTION [ EQUALS ] DO
  239.       BEGIN
  240.          OPTIONSSELECTED   := [ SPACEBEFORE,
  241.                                 SPACEAFTER,
  242.                 INDENTTOCLP ];
  243.          DINDENTSYMBOLS    := [];
  244.          GOBBLETERMINATORS := []
  245.       END;
  246.    WITH PPOPTION [ OPENPAREN ] DO
  247.       BEGIN
  248.          OPTIONSSELECTED   := [ GOBBLESYMBOLS ];
  249.          DINDENTSYMBOLS    := [];
  250.          GOBBLETERMINATORS := [ CLOSEPAREN ]
  251.       END;
  252.    WITH PPOPTION [ CLOSEPAREN ] DO
  253.       BEGIN
  254.          OPTIONSSELECTED   := [];
  255.          DINDENTSYMBOLS    := [];
  256.          GOBBLETERMINATORS := []
  257.       END;
  258.    WITH PPOPTION [ PERIOD ] DO
  259.       BEGIN
  260.          OPTIONSSELECTED   := [ CRSUPPRESS ];
  261.          DINDENTSYMBOLS    := [];
  262.          GOBBLETERMINATORS := []
  263.       END;
  264.    WITH PPOPTION [ ENDOFFILE ] DO
  265.       BEGIN
  266.          OPTIONSSELECTED   := [];
  267.          DINDENTSYMBOLS    := [];
  268.          GOBBLETERMINATORS := []
  269.       END;
  270.    WITH PPOPTION [ OTHERSYM ] DO
  271.       BEGIN
  272.          OPTIONSSELECTED   := [];
  273.          DINDENTSYMBOLS    := [];
  274.          GOBBLETERMINATORS := []
  275.       END
  276. END; (* INITIALIZE2 *)
  277.  
  278.  
  279.  
  280. PROCEDURE INITIALIZE( (* RETURNING *)
  281.                           VAR TOPOFSTACK  : INTEGER;
  282.                           VAR CURRLINEPOS,
  283.                               CURRMARGIN  : INTEGER;
  284.                           VAR KEYWORD     : KEYWORDTABLE;
  285.                           VAR DBLCHARS    : DBLCHRSET;
  286.                           VAR DBLCHAR     : DBLCHARTABLE;
  287.                           VAR SGLCHAR     : SGLCHARTABLE;
  288.                           VAR RECORDSEEN  : BOOLEAN;
  289.                           VAR CURRCHAR,
  290.                               NEXTCHAR    : CHARINFO;
  291.                           VAR CURRSYM,
  292.                               NEXTSYM     : SYMBOLINFO;
  293.                           VAR PPOPTION    : OPTIONTABLE   );
  294. BEGIN (* INITIALIZE *)
  295.    TOPOFSTACK  := 0;
  296.    CURRLINEPOS := 0;
  297.    CURRMARGIN  := 0;
  298.    KEYWORD [ PROGSYM    ] := 'PROGRAM   ' ;
  299.    KEYWORD [ FUNCSYM    ] := 'FUNCTION  ' ;
  300.    KEYWORD [ PROCSYM    ] := 'PROCEDURE ' ;
  301.    KEYWORD [ LABELSYM   ] := 'LABEL     ' ;
  302.    KEYWORD [ CONSTSYM   ] := 'CONST     ' ;
  303.    KEYWORD [ TYPESYM    ] := 'TYPE      ' ;
  304.    KEYWORD [ VARSYM     ] := 'VAR       ' ;
  305.    KEYWORD [ BEGINSYM   ] := 'BEGIN     ' ;
  306.    KEYWORD [ REPEATSYM  ] := 'REPEAT    ' ;
  307.    KEYWORD [ RECORDSYM  ] := 'RECORD    ' ;
  308.    KEYWORD [ CASESYM    ] := 'CASE      ' ;
  309.    KEYWORD [ CASEVARSYM ] := 'CASE      ' ;
  310.    KEYWORD [ OFSYM      ] := 'OF        ' ;
  311.    KEYWORD [ FORSYM     ] := 'FOR       ' ;
  312.    KEYWORD [ WHILESYM   ] := 'WHILE     ' ;
  313.    KEYWORD [ WITHSYM    ] := 'WITH      ' ;
  314.    KEYWORD [ DOSYM      ] := 'DO        ' ;
  315.    KEYWORD [ IFSYM      ] := 'IF        ' ;
  316.    KEYWORD [ THENSYM    ] := 'THEN      ' ;
  317.    KEYWORD [ ELSESYM    ] := 'ELSE      ' ;
  318.    KEYWORD [ ENDSYM     ] := 'END       ' ;
  319.    KEYWORD [ UNTILSYM   ] := 'UNTIL     ' ;
  320.    DBLCHARS := [ BECOMES, OPENCOMMENT ];
  321.    DBLCHAR [ BECOMES     ]  := ':=' ;
  322.    DBLCHAR [ OPENCOMMENT ]  := '(*' ;
  323.    SGLCHAR [ SEMICOLON  ]   := ';' ;
  324.    SGLCHAR [ COLON      ]   := ':' ;
  325.    SGLCHAR [ EQUALS     ]   := '=' ;
  326.    SGLCHAR [ OPENPAREN  ]   := '(' ;
  327.    SGLCHAR [ CLOSEPAREN ]   := ')' ;
  328.    SGLCHAR [ PERIOD     ]   := '.' ;
  329.    RECORDSEEN := FALSE;
  330.  SAWCOMOPEN := FALSE;
  331.  SAWCOMCLOSE := FALSE;
  332.  INACOMMENT := FALSE;
  333.  SAWQUOTEDSTRING := FALSE;
  334.    GETCHAR(
  335.             (* UPDATING *)  NEXTCHAR,
  336.             (* RETURNING *) CURRCHAR  );
  337.    NEW(CURRSYM);
  338.    NEW(NEXTSYM);
  339.    GETSYMBOL(
  340.               (* UPDATING *)  NEXTSYM,
  341.               (* RETURNING *) CURRSYM  );
  342.    WITH PPOPTION [ PROGSYM ] DO
  343.       BEGIN
  344.          OPTIONSSELECTED   := [ BLANKLINEBEFORE,
  345.                                 SPACEAFTER ];
  346.          DINDENTSYMBOLS    := [];
  347.          GOBBLETERMINATORS := []
  348.       END;
  349.    WITH PPOPTION [ FUNCSYM ] DO
  350.       BEGIN
  351.          OPTIONSSELECTED   := [ BLANKLINEBEFORE,
  352.                                 DINDENTONKEYS,
  353.                                 SPACEAFTER ];
  354.          DINDENTSYMBOLS    := [ LABELSYM,
  355.                                 CONSTSYM,
  356.                                 TYPESYM,
  357.                                 VARSYM ];
  358.          GOBBLETERMINATORS := []
  359.       END;
  360.    WITH PPOPTION [ PROCSYM ] DO
  361.       BEGIN
  362.          OPTIONSSELECTED   := [ BLANKLINEBEFORE,
  363.                                 DINDENTONKEYS,
  364.                                 SPACEAFTER ];
  365.          DINDENTSYMBOLS    := [ LABELSYM,
  366.                                 CONSTSYM,
  367.                                 TYPESYM,
  368.                                 VARSYM ];
  369.          GOBBLETERMINATORS := []
  370.       END;
  371.    WITH PPOPTION [ LABELSYM ] DO
  372.       BEGIN
  373.          OPTIONSSELECTED   := [ BLANKLINEBEFORE,
  374.                                 SPACEAFTER,
  375.                 INDENTTOCLP,
  376.                 CRAFTER ];
  377.          DINDENTSYMBOLS    := [];
  378.          GOBBLETERMINATORS := []
  379.       END;
  380.    WITH PPOPTION [ CONSTSYM ] DO
  381.       BEGIN
  382.          OPTIONSSELECTED   := [ BLANKLINEBEFORE,
  383.                                 DINDENTONKEYS,
  384.                 SPACEAFTER,
  385.                 INDENTTOCLP,
  386.                 CRAFTER ];
  387.          DINDENTSYMBOLS    := [ LABELSYM ];
  388.          GOBBLETERMINATORS := []
  389.       END;
  390.    WITH PPOPTION [ TYPESYM ] DO
  391.       BEGIN
  392.          OPTIONSSELECTED   := [ BLANKLINEBEFORE,
  393.                                 DINDENTONKEYS,
  394.                 SPACEAFTER,
  395.                 INDENTTOCLP,
  396.                 CRAFTER ];
  397.          DINDENTSYMBOLS    := [ LABELSYM,
  398.                                 CONSTSYM ];
  399.          GOBBLETERMINATORS := []
  400.       END;
  401.    WITH PPOPTION [ VARSYM ] DO
  402.       BEGIN
  403.          OPTIONSSELECTED   := [ BLANKLINEBEFORE,
  404.                                 DINDENTONKEYS,
  405.                 SPACEAFTER,
  406.                 INDENTTOCLP,
  407.                 CRAFTER  ];
  408.          DINDENTSYMBOLS    := [ LABELSYM,
  409.                                 CONSTSYM,
  410.                                 TYPESYM ];
  411.          GOBBLETERMINATORS := []
  412.       END;
  413.    WITH PPOPTION [ BEGINSYM ] DO
  414.       BEGIN
  415.          OPTIONSSELECTED   := [ DINDENTONKEYS,
  416.                                 INDENTBYTAB,
  417.                                 CRAFTER ];
  418.          DINDENTSYMBOLS    := [ LABELSYM,
  419.                                 CONSTSYM,
  420.                                 TYPESYM,
  421.                                 VARSYM ];
  422.          GOBBLETERMINATORS := []
  423.       END;
  424.    WITH PPOPTION [ REPEATSYM ] DO
  425.       BEGIN
  426.          OPTIONSSELECTED   := [ INDENTBYTAB,
  427.                                 CRAFTER ];
  428.          DINDENTSYMBOLS    := [];
  429.          GOBBLETERMINATORS := []
  430.       END;
  431.    WITH PPOPTION [ RECORDSYM ] DO
  432.       BEGIN
  433.          OPTIONSSELECTED   := [ INDENTBYTAB,
  434.                                 CRAFTER ];
  435.          DINDENTSYMBOLS    := [];
  436.          GOBBLETERMINATORS := []
  437.       END;
  438.    WITH PPOPTION [ CASESYM ] DO
  439.       BEGIN
  440.          OPTIONSSELECTED   := [ SPACEAFTER,
  441.                                 INDENTBYTAB,
  442.                                 GOBBLESYMBOLS,
  443.                                 CRAFTER ];
  444.          DINDENTSYMBOLS    := [];
  445.          GOBBLETERMINATORS := [ OFSYM ]
  446.       END;
  447.    WITH PPOPTION [ CASEVARSYM ] DO
  448.       BEGIN
  449.          OPTIONSSELECTED   := [ SPACEAFTER,
  450.                                 INDENTBYTAB,
  451.                                 GOBBLESYMBOLS,
  452.                                 CRAFTER ];
  453.          DINDENTSYMBOLS    := [];
  454.          GOBBLETERMINATORS := [ OFSYM ]
  455.       END;
  456.  INT2 ( TOPOFSTACK, CURRLINEPOS, CURRMARGIN, KEYWORD, DBLCHARS, DBLCHAR,
  457.  SGLCHAR, RECORDSEEN, CURRCHAR, NEXTCHAR, CURRSYM, NEXTSYM, PPOPTION );
  458.  END;
  459.  
  460.       BLCHAR,
  461.       SGLCHAR,
  462.       RECORDSEEN,
  463.       CURRCHAR,
  464.       NEXTCHAR, CURRSYM, NEXTSYM, PPOPTION );
  465.  END;
  466.  
  467.