home *** CD-ROM | disk | FTP | other *** search
- 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}