Проектирование лексического анализатора

Характеристика особенностей организации таблицы идентификаторов. Анализ принципов работы лексического анализатора. Изучение схемы распознавателя. Характеристика методов проектирования синтаксического анализатора. Матрица операторного предшествования.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 09.11.2017
Размер файла 407,9 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

12: begin StringGrid4.Cells[2,ind]:='Оператор сравнения';end;

13: begin StringGrid4.Cells[2,ind]:='Ключевое слово (условный оператор)';end;

14: begin StringGrid4.Cells[2,ind]:='Ключевое слово (логический оператор)';end;

15: begin StringGrid4.Cells[2,ind]:='Число в двоичной форме';end;

16: begin StringGrid4.Cells[2,ind]:='Ключевое слово (конец программы)';

StringGrid4.Cells[1,ind]:='end.';

end;

end;

str:='';

ind:=ind+1;

fl:=0;

end;

j:=j+1;

end;

i:=i+1;

end;

j:=0;

for i:=999 downto 1 do

begin

if StringGrid4.Cells[1,i]=''

then begin

StringGrid4.RowCount:=StringGrid4.RowCount-1;

j:=j+1;

end;

end;

//************************************************* Заполнение ТИ

i1:= StringGrid4.RowCount;

for j1:=1 to 513 do Form1.StringGrid5.Cells[0,j1]:=IntToStr(j1);

ukaz:=1;

Form1.StringGrid6.RowCount:=ukaz+1;

for i:=0 to i1-1 do

begin

if StringGrid4.Cells[2,i]='Идентификатор' then

begin

str:=StringGrid4.Cells[1,i];

i4:=Length(str);

if i4=1 then HF:=Ord(str[1])+Ord(str[1])

else HF:=Ord(str[1])+Ord(str[2]);

j1:=HF;

if Form1.StringGrid5.Cells[1,HF]=''

then begin

Form1.StringGrid5.Cells[1,HF]:=inttostr(ukaz);

Form1.StringGrid6.Cells[0,ukaz]:=inttostr(ukaz);

Form1.StringGrid6.Cells[1,ukaz]:=str;

Form1.StringGrid6.RowCount:=ukaz+1;

ukaz:=ukaz+1;

end

else begin

j:=1;

adr:=strtoint(Form1.StringGrid5.Cells[1,HF]);

L3: if Form1.StringGrid6.Cells[1,adr]<>str then

if Form1.StringGrid6.Cells[2,adr]='' then

begin

Form1.StringGrid6.Cells[0,ukaz]:=inttostr(ukaz);

Form1.StringGrid6.Cells[1,ukaz]:=str;

Form1.StringGrid6.Cells[2,adr]:=inttostr(ukaz);

Form1.StringGrid6.RowCount:=ukaz+1;

ukaz:=ukaz+1;

end

else begin

j:=j+1;

adrr:=strtoint(Form1.StringGrid6.Cells[2,adr]);

adr:=adrr;

goto L3;

end;

end;

end;

end;

//******************************************************************** Дерево

inputString:=TStringList.Create;

inputString.Sorted:=False;

Nrow:=1;

with StringGrid4 do

begin

while cells[0,NRow]<>'' do

begin

if (cells[2,NRow]='Число в двоичной форме')then inputString.Add('c')

else if(cells[2,NRow]='Идентификатор') then inputString.Add('a')

else inputString.Add(cells[1,Nrow]);

NRow:=Nrow+1

end;

end;

for i:=0 to inputString.Count-1 do MyinS:=MyinS+' '+InputString[i];

memo7.text:=MyinS;

if inputString.Count=0 then

begin

ShowMessage('Файл не загружен.');

exit

end;

inputString.Add('!');

SymbStack:=TStringList.Create;

SymbStack.Sorted:=False;

SymbStack.Add('!');

i:=0;

k:=0;

cep:='';

while i<=inputString.Count-1 do

begin

verh:=SymbStack.Count-1;

syms:=SymbStack[verh];

while (not(inArray(SymbStack[verh],term,29))) do verh:=verh-1;

if (SymbStack[verh]='!') and (inputString[i]='!') then goto MyEnd;

Mycase:=PredMatrix[IndMatrix(SymbStack[verh]),IndMatrix(inputString[i])];

if ((mycase='<')or(mycase='='))then

begin

SymbStack.Add(inputString[i]);

i:=i+1;

end

else if (mycase='>')

then begin

gamma:='';

tek:='';

for j:=SymbStack.Count-1 downto 0 do

if not(inArray(SymbStack[j],term,29)) then

begin

gamma:=SymbStack[j]+gamma;

SymbStack.Delete(j)

end

else if (inArray(SymbStack[j],term,29))and(tek='') then

begin

tek:=SymbStack[j];

gamma:=SymbStack[j]+gamma;

SymbStack.Delete(j)

end

else if predMatrix[Indmatrix(SymbStack[j]),IndMatrix(tek)]='=' then

begin

tek:=SymbStack[j];

gamma:=SymbStack[j]+gamma;

SymbStack.Delete(j)

end

else break;

if findnt(gamma)<>'' then

begin

SymbStack.Add(findnt(gamma));

k:=k+1;

CepofV[k]:=NomRul(gamma);

cep:=inttostr(CepofV[k])+' '+cep;

end

else begin {ошибка}

ShowMessage('Недопустимая цепочка:'+gamma+');

goto tree

end;

end;

if mycase=' ' then

begin {ошибка}

ShowMessage('Символы '+Symbstack[verh]+' и '+InputString[i]+' не могут следовать друг за другом');

goto tree;

end;

end;

Myend:memo6.Text:=cep;

tree:n:=k;

with TreeView1 do

begin

Items.Add(Nil,'E');

vetv:=0;

for k:=n downto 1 do begin

m:=Items.Count;

if k<n then

for i:=m-1 downto 0 do

if Items[i].Text=notterm[CepofV[k]] then

if Items[i].HasChildren=False then

begin

vetv:=i;

goto zap

end;

zap: for i:=1 to 7 do

if CanonO[CepofV[k],i]<>'' then

Items.AddChild(Items[vetv],CanonO[CepofV[k],i])

end;

FullExpand

end;

end;

end.

Приложение Б

Граф состояний лексического анализатора

Рис. 1 Приложения Б. Граф состояний лексического анализатора без ключевых слов

Рис. 2 Приложения Б. Граф состояний лексического анализатора с ключевыми словами

prog

1

end.

2

;

3

if

4

then

5

else

6

endif

7

begin

8

end

9

for

10

to

12

downto

13

do

14

a

15

c

16

:=

17

or

18

and

19

not

20

<

21

>

22

=

23

(

23

)

24

-

25

+

26

*

27

/

28

prog

=

<

<

<

<

<

end.

>

;

>

>

<

<

>

<

<

if

=

<

<

<

<

<

<

<

<

<

<

<

<

<

then

<

=

=

<

<

<

else

<

=

<

<

<

endif

>

>

>

>

>

<

begin

<

<

<

=

<

<

end

>

>

>

>

>

for

=

=

<

to

=

<

<

<

<

<

<

<

downto

=

<

<

<

<

<

<

<

do

>

>

<

>

>

<

>

<

<

a

>

>

>

>

>

>

>

>

>

>

=

>

>

>

>

>

>

>

>

>

>

>

c

>

>

>

>

>

>

>

>

>

>

>

>

>

>

>

>

>

>

>

>

:=

>

>

>

>

>

>

>

<

<

<

>

<

<

<

<

or

>

<

>

<

<

<

<

<

<

>

<

<

<

<

and

>

<

<

<

>

<

<

<

<

<

>

<

<

<

<

not

>

<

<

<

>

<

<

<

<

<

>

<

<

<

<

<

>

<

<

<

>

<

>

<

<

<

<

>

>

<

<

<

>

<

>

<

<

<

<

=

>

<

<

<

>

<

>

<

<

<

<

(

<

<

<

<

<

<

<

<

<

=

<

<

<

<

)

>

>

>

>

>

>

>

>

>

>

>

>

>

>

>

>

>

>

>

>

-

>

>

>

>

>

>

>

>

>

>

<

<

>

>

>

>

>

<

>

>

>

>

>

+

>

>

>

>

>

>

>

>

>

>

<

<

>

>

>

>

>

<

>

>

>

>

>

*

>

>

>

>

>

>

>

>

>

>

<

<

>

>

>

>

>

<

>

>

>

>

>

/

>

>

>

>

>

>

>

>

>

>

<

<

>

>

>

>

>

<

>

>

>

>

>

<

Размещено на Allbest.ru


Подобные документы

  • Организация таблицы идентификаторов, ее содержание и назначение. Метод бинарного дерева и цепочек. Проектирование лексического анализатора и схема распознавателя. Построение дерева вывода, синтаксический анализатор. Анализ результатов работы программы.

    курсовая работа [1,0 M], добавлен 25.12.2014

  • Проектирование программы-анализатора, состоящей из двух частей: лексического анализатора, разбивающего исходный текст программы на лексемы и заполняющего таблицу имен; синтаксического анализатора, проверяющего соответствие текста заданной грамматике.

    курсовая работа [2,0 M], добавлен 14.06.2010

  • Методы грамматического разбора при разработке учебного транслятора. Проектирование лексического анализатора и магазинного автомата. Программная реализация синтаксического анализатора текстового языка высокого уровня. Разработка модуля интерпретации.

    курсовая работа [697,2 K], добавлен 06.01.2013

  • Назначение, принципы и методы построения таблиц идентификаторов. Метод простого рехэширования с помощью произведения. Назначение лексического анализатора. Таблица лексем и содержащаяся в ней информация. Построение лексических анализаторов (сканеров).

    курсовая работа [703,1 K], добавлен 08.02.2011

  • Структура, классификация и требования к реализации компилятора. Проектирование и реализация анализирующей части компилятора языка С++. Способы реализации лексического анализа. Алгоритм работы синтаксического анализатора. Принципы программной реализации.

    курсовая работа [774,2 K], добавлен 26.01.2013

  • Общая характеристика и оценка возможностей языка программирования си-шарп, его сходные и отличительные черты от С++ и Java. Разработка с помощью данного языка программирования лексического и синтаксического анализатора. Составление таблиц разбора.

    курсовая работа [111,6 K], добавлен 11.06.2010

  • Функции компилятора как системной обрабатывающей программы. Этапы компиляции: анализ и синтез. Разработка лексического анализатора. Алгоритм и программа лексического анализа. Реализация двухфазного компилятора. Описание логической структуры программы.

    курсовая работа [310,4 K], добавлен 26.03.2010

  • Написание программы, которая выполняет лексический и синтаксический анализ входного языка программирования, порождает таблицу лексем с указанием их типов и значений, а также строит синтаксическое дерево; текст входного языка вводится с клавиатуры.

    курсовая работа [761,5 K], добавлен 23.02.2012

  • Разработка технического задания на проектирование, определение требований к программе. Предварительный выбор метода решения синтаксического анализатора, проектирование программного приложения, конфигурация технических средств программы и её тестирование.

    курсовая работа [28,5 K], добавлен 28.06.2011

  • Описание синтаксиса и семантики входного языка. Описание типов лексем, определение их синтаксиса. Построение диаграммы лексического анализатора, а также его таблицы, тестирование. Построение КС-грамматики входного языка. Описание промежуточного языка.

    курсовая работа [83,0 K], добавлен 23.01.2014

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.