Книга: Системное программное обеспечение. Лабораторный практикум
Листинг П3.6. Описание матрицы предшествования и правил исходной грамматики
Листинг П3.6. Описание матрицы предшествования и правил исходной грамматики
unit SyntRule; {!!! Зависит от входного языка!!!}
interface
{ Модуль, содержащий описание матрицы предшествования
и правил грамматики }
uses LexType, Classes;
const { Максимальная длина правила }
RULE_LENGTH = 7; { (в расчете на символы грамматики) }
RULE_NUM = 28; { Общее количество правил грамматики }
Var { Матрица операторного предшествования }
GramMatrix: array[TLexType,TLexType] of char =
({pr. end.; if () else beg end whl do a c:= or xor and < > = <> not – + um! }
{pr.} ( , = , <, <, ,', ,'<, ,'<, ,'<, ,', ,', ,', ,', ,
', , , , ),
{end.}( , , , , , , , , , , , , , , , , , , , , ,
', , , , >),
{;} ( , >, >, <, ,', ,'<, >, <, ,'<, ,', ,', ,', ,', ,
', , , , ),
{if} ( , , , , = , , , , , , , , , , , , , , , , ,
', , , , ),
{(} ( , , , , <, =, ,', ,', ,'<, <,
', <, <, <, <, <, <, <, <, <, <, <, ),
{)} ( , >, >, <, ,'>, =, <, >, <, =, <, ,', >, >, >, >, >, >, >,
', >, >, ,'),
{else}( , >, >, <, ,', >, <, >, <, ,'<, ,', ,', ,', ,', ,
', , , , ),
{beg.}( , , <, <, ,', ,'<, =, <, ,'<, ,', ,', ,', ,', ,
', , , , ),
{end} ( , >, >, ,', ,'>, ,'>, ,', ,', ,', ,', ,', ,',
', , , , ),
{whil}( , , , , = , , , , , , , , , , , , , , , , ,
', , , , ),
{do} ( , >, >, <, ,', >, <, <, <, ,'<, ,', ,', ,', ,', ,
', , , , ),
{a} ( , >, >, ,', >, >, ,'>, ,', ,', =, >, >, >, >, >, >, >,
', >, >, ,'),
{c} ( , >, >, ,', >, >, ,'>, ,', ,', ,'>, >, >, >, >, >, >,
', >, >, ,'),
{:=} ( , >, >, ,'<, ,'>, ,'>, ,', <, <, ,', ,', ,', ,',
', <, <, <, ),
{or} ( , , , , <, >, ,', ,', ,'<, <,
', >, >, <, <, <, <, <, <, <, <, <, ),
{xor} ( , , , , <, >, ,', ,', ,'<, <,
', >, >, <, <, <, <, <, <, <, <, <, ),
{and} ( , , , , <, >, ,', ,', ,'<, <,
', >, >, >, <, <, <, <, <, <, <, <, ),
{<} ( , , , , <, >, ,', ,', ,'<, <, ,'>, >, >, ,', ,',
', <, <, <, ),
{>} ( , , , , <, >, ,', ,', ,'<, <, ,'>, >, >, ,', ,',
', <, <, <, ),
{=} ( , , , , <, >, ,', ,', ,'<, <, ,'>, >, >, ,', ,',
', <, <, <, ),
{<>} ( , , , , <, >, ,', ,', ,'<, <, ,'>, >, >, ,', ,',
', <, <, <, ),
{not} ( , , , , = , , , , , , , , , , , , , , , , ,
', , , , ),
{-} ( , >, >, ,'<, >, >, ,'>, ,', <, <, ,'>, >, >, >, >, >, >,
', >, >, <, ),
{+} ( , >, >, ,'<, >, >, ,'>, ,', <, <, ,'>, >, >, >, >, >, >,
', >, >, <, ),
{um} ( , >, >, ,'<, >, >, ,'>, ,', <, <, ,'>, >, >, >, >, >, >,
', >, >, <, ),
{!} (<, ,', ,', ,', ,', ,', ,', ,', ,', ,', ,',
', , , , ));
{ Правила исходной грамматики }
GramRules: array[1..RULE_NUM] of string =
('progEend.,'E','E;E','E;,'if(B)EelseE','if(B)E',
'beginEend','while(B)doE','a:=E','BorB','BxorB','B',
'BandB','B','E<E','E>E','E=E','E<>E', (B),'not(B),
'E-E','E+E','E', -E','E', (E),'a','c');
{ Функция имени нетерминала для каждого правила }
function MakeSymbolStr(iRuleNum: integer): string;
{ Функция корректировки отношений предшествования
для расширения матрицы предшествования }
function CorrectRule(cRule: char; lexTop,lexCur: TLexType;
symbStack: TList): char;
implementation
uses SyntSymb;
function MakeSymbolStr(iRuleNum: integer): string;
begin
if iRuleNum in [10..20] then Result:= 'B'
else Result:= 'E';
end;
function CorrectRule(cRule: char; lexTop,lexCur: TLexType;
symbStack: TList): char;
var j: integer;
begin { Корректируем отношение для символа «else»,
если в стеке не логическое выражение }
Result:= cRule;
if (cRule = = ) and (lexTop = LEX_CLOSE)
and (lexCur = LEX_ELSE) then
begin
j:= TSymbStack(symbStack). Count-1;
if (j > 2)
and (TSymbStack(symbStack)[j-2].SymbolStr <> 'B')
then Result:= >;
end;
end;
end.
- 9.4.1. Реализация графа в виде матрицы смежности
- Правила творческой лени
- Листинг 10.1. (simpleid.c) Отображение идентификаторов пользователя и группы
- Правильная стратегическая последовательность
- Как правильно раздавать и аннулировать права
- Часы в Windows показывают неправильное время
- 1.3. Правила подключения к компьютеру внешних устройств
- Как я нашла «правильных» потребителей, когда искала «неправильных»
- Листинг 15.11. Код для загрузки файла с Web-сервера
- Правила именования файлов
- 3. Null-значения и общее правило вычисления выражений
- 2. Правила вывода Армстронга