Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
34
Добавлен:
02.05.2014
Размер:
2.29 Кб
Скачать
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