Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
37
Добавлен:
02.05.2014
Размер:
2 Кб
Скачать
unit SyntRule; {!!! Зависит от входного языка !!!}

interface
{ Модуль, содержащий описание матрицы предшествования
  и правил грамматики }

uses LexType, Classes;

const
  RULE_LENGTH = 7; { максимальная длина правила
                     (в расчете на символы грамматики) }
  RULE_NUM = 13;   { общее количество правил грамматики }

var
  GramMatrix: array[TLexType,TLexType] of char =
  (      {;   if  then  else  a    a   :=   or   xor  and   (    )    ! }
  {;}   (' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '>'),
  {if}  (' ', ' ', '=', ' ', '<', '<', ' ', '<', '<', '<', '<', ' ', ' '),
  {then}('>', '<', ' ', '=', '<', '<', ' ', ' ', ' ', ' ', ' ', ' ', ' '),
  {else}('>', '<', ' ', '>', '<', '<', ' ', ' ', ' ', ' ', ' ', ' ', ' '),
  {a}   ('>', ' ', '>', '>', ' ', ' ', '=', '>', '>', '>', ' ', '>', ' '),
  {a}   ('>', ' ', '>', '>', ' ', ' ', '=', '>', '>', '>', ' ', '>', ' '),
  {:=}  ('>', ' ', ' ', '>', '<', '<', ' ', '<', '<', '<', '<', ' ', ' '),
  {or}  ('>', ' ', '>', '>', '<', '<', ' ', '>', '>', '<', '<', '>', ' '),
  {xor} ('>', ' ', '>', '>', '<', '<', ' ', '>', '>', '<', '<', '>', ' '),
  {and} ('>', ' ', '>', '>', '<', '<', ' ', '>', '>', '>', '<', '>', ' '),
  {(}   (' ', ' ', ' ', ' ', '<', '<', ' ', '<', '<', '<', '<', '=', ' '),
  {)}   ('>', ' ', '>', '>', ' ', ' ', ' ', '>', '>', '>', ' ', '>', ' '),
  {!}   ('<', '<', ' ', ' ', '<', '<', ' ', ' ', ' ', ' ', ' ', ' ', ' '));

  GramRules: array[1..RULE_NUM] of string =
  ('E;','ifEthenEelseE','ifEthenE','a:=E','ifEthenEelseE',
   'a:=E','EorE','ExorE','E','EandE','E','a','(E)');

function MakeSymbolStr(iRuleNum: integer): string;

{ Функция корректировки отношений предшествования
  для расширения матрицы предшествования }
function CorrectRule(cRule: char; lexTop,lexCur: TLexType;
                     symbStack: TList): char;

implementation

function MakeSymbolStr(iRuleNum: integer): string;
begin
  Result := 'E';
end;

function CorrectRule(cRule: char; lexTop,lexCur: TLexType;
                     symbStack: TList): char;
{ Функция корректировки отношений предшествования
  для расширения матрицы предшествования }
begin
  { В данном случае корректировать ничего не нужно }
  Result := cRule;
end;

end.
Соседние файлы в папке Labs