Проектирование лексического анализатора
Характеристика особенностей организации таблицы идентификаторов. Анализ принципов работы лексического анализатора. Изучение схемы распознавателя. Характеристика методов проектирования синтаксического анализатора. Матрица операторного предшествования.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 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