ify"> stack: array [1.256] of char; {Стек}, p: byte;: string [10]; {Правило} GetN (c: char): byte; {Дізнатися номер символу в граматиці}
beginc of
'Z': GetN: = 1;
'G': GetN: = 2;
'N': GetN: = 3;
',': GetN: = 4;
'-': GetN: = 6;
0 ". '9 ': GetN: = 5;
'-': GetN: = 255; GetN: = 0;;; Push (c: char); {Помістити символ в стек} (sp); [sp]: = c;; Cmp (x, y: char): char; {Порівняти два символи} i, j: byte;: = GetN (x); j: = GetN (y); (i = 0) or (j = 0) then Cmp: = '' elsex = '-' then Cmp: = '<' elsey = '-' then Cmp: = '>' else: = a [i, j];; Top: char; {Верхній символ стека}: = Stack [sp];; Error (kind: byte); {Помилка розбору}: = false; Kind = 1 then write ('BAD SYMBOL') elseKind = 2 then Writeln ('NO RULE') elsekind = 3 then writeln ( 'MORE SYMBOLS');; FindLessPos: byte; {Пошук основи} p: byte;: = sp; not (Cmp (Stack [p-1], Stack [p]) = '<') do dec (p) ;: = p;; GetRule (p: byte): String; {Виділити правило з стека з позиції p} T: string;: byte;: =''; i: = p to sp do T: = T + Stack [ i];: = T;; FindAndExchangeRule (var s: string): boolean; {Замінити рядок s по деякому правилу} i: byte;: boolean; i: = 1 to length (s) do if s [i] in [ 0 ". '9 '] Then s [i]: =' ц ';: = 1; b: = true; (i <= LawCount) and b doLaws [i, 2] = s then b: = false else inc (i) ;: = not b; b then s: = Laws [i, 1];: = b;; XChangeStack; {Замінити символи в стеку} [p]: = Rule [1];: = p;; (input, ' input. txt '); (input); (output,' output. txt '); (output); (s); {Введення пропозиції} (s);: = s +' - ';: = Length (s); ('-'); s = '-' then writeln ('BLANK LINE') else beginCmp (Top, S [i]) of
'<', '=': begin (S [i]); (i);;
'>': begin: = FindLessPos;: = GetRule (p); FindAndExchangeRule (rule) then XchangeStackError (2);;
'': Error (1);; not Ok or (i> L) or ((sp = 2) and (Stack [2] = 'Z') and (i = L)) ; Ok then if (sp = 2) and (Stack [2] = 'Z') then writeln ('OK') Error (3);; (input); (output);
end.
Решта варіантів описуються аналогічним способом.
Додаток 2
Вихідні тексти умов завдань task. htm:
Робота № 1, варіант № 1:
Синтаксичний аналіз пропозицій для регулярної граматики
Варіант № 1