"Джек Креншоу. Давайте создадим компилятор! " - читать интересную книгу автораиспользовании одиночного, глобального упреждающего символа. Части процедуры
инициализации служит для "запуска помпы", считывая первый символ из входного потока. Никаких других специальных методов не требуется... каждый удачный вызов GetChar считывает следующий символ из потока. {-} program Cradle; {-} { Constant Declarations } const TAB = ^I; {-} { Variable Declarations } var Look: char; { Lookahead Character } {-} { Read New Character From Input Stream } procedure GetChar; begin Read(Look); end; {-} { Report an Error } procedure Error(s: string); begin WriteLn; WriteLn(^G, 'Error: ', s, '.'); {-} { Report Error and Halt } procedure Abort(s: string); begin Error(s); Halt; end; {-} { Report What Was Expected } procedure Expected(s: string); begin Abort(s + ' Expected'); end; {-} { Match a Specific Input Character } procedure Match(x: char); begin if Look = x then GetChar else Expected('''' + x + ''''); end; {-} { Recognize an Alpha Character } function IsAlpha(c: char): boolean; begin |
|
|