[Back to PARSING SWAG index] [Back to Main SWAG index] [Original]

    Program PARSER;

    {The Object of this Program is to accept a sentence from the user then to break the
     sentence into its Component Words and to display each Word on a separate line.
    }

    Uses Crt; {Required by Turbo Pascal}

    Const
      maxWord     = 15;
      maxsentence = 15;
      space       = CHR(32);
      first       = 1;

    Type
      Strng = Array[1..maxWord] of Char;
      Word  = Record
        body   : Strng;
        length : Integer
      end;

    Var
      sentence                 : Array[1..maxsentence] of Word;
      row, col, nextcol, count : Integer;
      demarker                 : Boolean;
      ans                      : Char;

    Procedure SpaceTrap;
    { Insures that there is ony 1 space between Words     }
    begin
      Repeat
        READ(sentence[row].body[first])
      Until sentence[row].body[first] <> space
    end;

    Procedure StringWrite(Var phrase : Word);
    {Writes only the required length of each Character String.
    This is required when using 32 col. mode.}
    Var
      letter : Integer;
    begin
             For letter := first to phrase.length do
               Write(phrase.body[letter])
           end; {Procedure StringWrite}

         Procedure StringRead;
          Var I : Integer;
          begin
          {
           Intitialize the Variables
          }
            count    := 1;
            row      := first;
            col      := first;
            nextcol  := col + 1;
            demarker := False;
            For I := first to maxsentence do
                sentence[I].length := 1;
            Write('Type a sentence >  ');
            {READLN;} {Clears the buffer of EOLN}
                      {Required by HiSoft Pascal}
                While (not EOLN) and (row < maxsentence) do
                    begin
                       READ(sentence[row].body[col]);
                       if sentence[row].body[first] = space then SpaceTrap;
                       if sentence[row].body[col] = space then
                          demarker := True;
                       if (not demarker) and (nextcol < maxWord) then
                           begin
                             col     := col + 1;
                             nextcol := nextcol + 1
                           end
                        else
                          begin
                            sentence[row].length := col;
                            count                := count + 1;
                            row                  := row + 1;
                            col                  := first;
                            nextcol              := col + 1;
                            demarker             := False
                          end; {if...then...else}
            if EOLN then sentence[row].length := col - 1
            {Accounts For the last Word entered less the EOLN marker.}
                    end {While loop}
          end; {Procedure StringRead}

         Procedure PrintItOut;
          Var
              subsequent : Integer;
          begin
              subsequent := first + 1;
              Write('Parsing > ');
              StringWrite(sentence[first]);
              WriteLN;
              if count >= subsequent then
                  begin
                      For row := subsequent to count do
                          begin
                              Write('          ');
                              StringWrite(sentence[row]);
                              WriteLN
                          end
                  end
           end; {Procedure PrintItOut}

         Procedure SongandDance;
          begin
              {PAGE;} {HiSoft Pascal = Turbo Pascal ClrScr}
              ClrScr;
              WriteLN('           Parser');
              WriteLN;
              WriteLN('    Program By David Solly');
              WriteLN;
              WriteLN('   The Object of this Program');
              WriteLN('is to accept a sentence from');
              WriteLN('the user then to break the');
              WriteLN('sentence down into its');
              WriteLN('Component Words and to display');
              WriteLN('each Word on a seperate line.');
              WriteLN;
              WriteLN;
          end; {Procedure SongandDance}

         begin {Main Program}
         SongandDance;
         StringRead;
         WriteLN;
         PrintItOut;
         WriteLN;
         WriteLN('end of Demonstration.');
         READLN(ans);
         end. {Main Program}

[Back to PARSING SWAG index] [Back to Main SWAG index] [Original]