www.mucker.at http://www.mucker.at Helmut Mucker de Ein kleiner Pascal PrettyPrinter http://www.mucker.at/2006//09#prpr_pas <!-- amazon-search: pascal programmieren --> <!-- amazon-mode: books --> Ein Programm zum "Pretty-Printen" von PASCAL-Source-Code. <pre> PROGRAM prettyPrinter(input,output); { Version 1.0 } CONST MAXLEN = 15; GROSS = ['A'..'Z']; KLEIN = ['a'..'z']; TYPE tString = string[MAXLEN]; VAR inFile, outFile : text; procedure readword(var inFile : text; var inString : tString); var ch : char; EOW : boolean; begin EOW:= EOF(inFile); inString:= ''; while not EOW do begin read(inFile,ch); inString:= concat(inString,ch); if not (ch in GROSS+KLEIN) then EOW:= TRUE; end end; PROCEDURE convert(inWord : tString; var outWord:tString); VAR n : integer; BEGIN outWord:= inWord; FOR n:= 1 TO length(outWord) DO IF outWord[n] in KLEIN THEN BEGIN outWord[n]:= chr(ord('A')+ord(outWord[n])-ord('a')); END; END; { convert } FUNCTION keyWord(inWord:tString):boolean; BEGIN IF (inWord = 'PROGRAM') or (inWord = 'CONST') or (inWord = 'CONST') or (inWord = 'LABEL') or (inWord = 'LABEL') or (inWord = 'TYPE') or (inWord = 'VAR') or (inWord = 'PROCEDURE') or (inWord = 'FUNCTION') or (inWord = 'BEGIN') or (inWord = 'END') or (inWord = 'CASE') or (inWord = 'OF') or (inWord = 'IF') or (inWord = 'THEN') or (inWord = 'ELSE') or (inWord = 'GOTO') or (inWord = 'FOR') or (inWord = 'TO') or (inWord = 'DOWNTO') or (inWord = 'REPEAT') or (inWord = 'UNTIL') or (inWord = 'WHILE') or (inWord = 'DO') or (inWord = 'ALGORITHM') or (inWord = 'OD') or (inWord = 'FI') or (inWord = 'DO') or (inWord = 'ALGEBRA') or (inWord = 'OPS') or (inWord = 'SETS') or (inWord = 'FUNCTIONS') THEN keyWord:= TRUE ELSE keyWord:= FALSE; END; { keyWord } PROCEDURE scanFile(VAR inFile:text); VAR word, outWord : tString; n : integer; lastchar : char; BEGIN WHILE (not(EOF(inFile))) DO BEGIN readWord(inFile,word); lastchar:= word[length(word)]; word:= copy(word,1,length(word)-1); convert(word,outWord); if keyWord(outWord) then write(outFile,outWord) else write(outFile,word); write(outFile,lastchar); END END; { scanFile } begin { PROGRAM } assign(inFile,paramstr(1)); reset(inFile); assign(outFile,paramstr(2)); rewrite(outFile); scanFile(inFile); close(inFile); close(outFile); END. </pre>