RSS    

   Курсовая работа: Розробка компілятора з вхідної мови програмування

2.1.2. Розроблено синтаксичний аналізатор на основі автомата з магазинною пам’яттю. Складено таблицю переходів для даного автомата згідно правил записаних в нотації у формі Бекуса-Наура.

2.1.3. Розроблено генератор коду, який починає свою роботу після того, як лексичним, синтаксичним та семантичним аналізатором не було виявлено помилок у програмі, написаній мовою М13. Проміжним кодом генератора є програма на мові Assembler(i8086). Вихідним кодом є машинний код, що міститься у виконуваному файлі

3.  Проведене тестування компілятора за допомогою тестових програм за наступними пунктами:

3.1.1. Виявлення лексичних помилок.

3.1.2. Виявлення синтаксичних помилок.

3.1.3. Загальна перевірка роботи компілятора.

Тестування не виявило помилок в роботі компілятора, а всі помилки в тестових програмах мовою М13 були виявлені і дано попередження про їх наявність.

В результаті виконання даної курсової роботи було успішно засвоєно методи розробки та реалізації компонент системного програмного забезпечення.


Список використаної літератури

1.  Бек Л.С. Введение в системное програмирование. – М.:Мир, 1988.

2.  Касаткин М.В. Касаткина Т.Я. Професиональное програмирование на языке С.В 3т. – М. Мир, 1989.//т.3. Системное програмирование.

3.  Кузьмин А.Я. Лексический анализ. – М.:ВШ.,1985.

4.  Фролов А.В. Проэктирование компиляторов. –М.: Мир,1989.

5.  Страуструп Б. Введение в язык C++, 2001.

6.  Ахо А., Сети Р., Ульман Дж.Компиляторы: принципы, технологии, инструменты. – М.: Издательский дом «Вильямс», 2003.

7.  Джордейн Р. Справочник программиста ПК IBM PC, XT/AT. – М.: ФиС, 1992.

8.  Абель П. Ассемблер для IBM PC, 1991.

9.  Прата С. Язык программирования Си, 2003


Додатки

Додаток A

A B C D
13 1 (byte) ^ NOT while-do

program TFirst;

uses App,dialogs,drivers,menus,objects,stddlg,views,validate;

type TMyApp=object(TApplication)

procedure InitStatusLine; virtual;

procedure InitMenuBar; virtual;

procedure NewWindow; virtual;

procedure HandleEvent(var Event:TEvent);virtual;

procedure NewDialog;virtual;

{procedure Init;virtual;}

end;

DialogData=record

{CheckBoxData:Word;

RadioButtonData:word;}

InputLineData:string[128];

end;

MyStruct=record

b:integer;

b1:integer;

c:string[32];

end;

PM13Window=^TM13Window;

TM13Window=object(TWindow)

constructor Init(Bounds:TRect;

WinTitle:string;WindowNo:Word);

procedure MakeInterior(Bounds:TRect);

end;

var M13DialogData:DialogData;

s1:string;

const

MaxLines=2000;

var LineCount:integer;

Lines:array [0..MaxLines-1]of PString;

type

PInterior=^TInterior;

TInterior=object(Tscroller)

constructor Init(var Bounds:TRect;AHScrollBar,

AVScrollBar:PScrollBar);

procedure Draw;virtual;

end;

const cmNewWin=199;cmFileOpen=200;WinCount:Integer=0;cmCompile=201;

procedure TMyApp.InitStatusLine;

var r:TRect;

begin

{GetExtent(r);}

r.a.y:=r.b.y+1;

StatusLine:=New(PStatusLine,Init(r,

NewStatusDef(0,$ffff,

NewStatusKey('~Alt-X~ Exit', kbAltX, cmQuit,

NewStatusKey('~Alt-F4~ New', kbF4, cmNewWin,

NewStatusKey('~Alt-F3~ Close', kbAltF3, cmClose,

NewStatusKey( '',kbF10, cmMenu,

nil)))),

nil)));

end;

procedure TMyApp.InitMenuBar;

var r:TRect;

begin

GetExtent(r);

r.b.y:=r.a.y+1;

MenuBar:=New(PMenuBar, Init(r, NewMenu(

NewSubMenu('~F~ile', hcNoContext, NewMenu(

NewItem('~O~pen', 'F3',kbF3,cmFileOpen, hcNoContext,

NewItem('~N~ew', 'F4',kbF4,cmNewWin, hcNoContext,

NewLine(

NewItem('E~x~it', 'Alt-x', kbAltX, cmQuit, hcNoContext,

nil))))),

NewSubMenu('~W~indow', hcNoContext, NewMenu(

NewItem('~N~ext', 'F6',kbF6,cmNext, hcNoContext,

NewItem('~Z~oom', 'F5',kbF5,cmZoom, hcNoContext,

nil))),

NewSubMenu('~C~ompile', hcNoContext, NewMenu(

NewItem('~C~ompile','Alt-F9',kbAltF9,cmCompile,hcNoContext,

nil)),

nil

))))));end;

procedure TMyApp.NewWindow;

var Window:PM13Window;

r:TRect;

i:integer;

begin

i:=0;

inc(WinCount);

r.assign(0,0,80,23-wincount+1);

r.move(0,i+wincount-1);

window:=new(pM13window, init(r, 'Compile window', wincount));

desktop^.insert(window);

end;

procedure TMyApp.NewDialog;

var

Dialog:PDialog;

R:TRect;

control:Word;

B:PView;

Window:PM13Window;

i:integer;

f:text;

s:string;

begin

R.Assign(20,6,60,19);

Dialog:=New(PDialog,Init(R,'M13 Dialog'));

with Dialog^ do

begin

R.Assign(15,10,25,12);

Insert(New(PButton,Init(R,'~O~K',cmOK,bfDefault)));

R.Assign(28,10,38,12);

Insert(New(PButton,Init(R,'Cancel',cmCancel,bfNormal)));

R.Assign(3,8,37,9);

B:=New(PInputLine,Init(r,128));

insert(b);

R.Assign(2,7,24,8);

insert(New(PLabel,Init(R,'Delivery instructions',B)));

end;

Dialog^.SetData(M13DialogData);

Control:=DeskTop^.ExecView(Dialog);

if Control<>cmCancel then Dialog^.GetData(M13DialogData);

i:=0;

while M13DialogData.InputLineData[i]<>'.' do

begin

s[i]:=M13DialogData.InputLineData[i];

i:=i+1;

end;

s[i]:=M13DialogData.InputLineData[i];

s[i+1]:=M13DialogData.InputLineData[i+1];

s[i+2]:=M13DialogData.InputLineData[i+2];

s[i+3]:=M13DialogData.InputLineData[i+3];

s1:=s;

LineCount:=0;

Assign(F,s);

reset(F);

while not Eof(F) and (LineCount<MaxLines)do

begin

readln(f,s);

lines[linecount]:=newstr(s);

inc(linecount);

{writeln(lines[linecount]^);}

end;

close(F);

i:=0;

inc(WinCount);

r.assign(0,0,80,23-wincount+1);

r.move(0,i+wincount-1);

window:=new(pM13window, init(r, s1, wincount));

desktop^.insert(window);

end;

function vuraz(var s:char):integer;

var

w:integer;

begin

if ((integer(s)>=97)and(integer(s)<=122))or((integer(s)>=65)and(integer(s)<=90))

then vuraz:=30

else vuraz:=29;

end;

procedure Compiles;

label aa;

var a1:array [1..100] of MyStruct;

i,j,j1,k,kk,i1,i2,var_kil,begin_kil,end_kil,var_index,begin_index,end_index:integer;

q,q1:string;

ss:array [1..50] of string[50];

f1,f2,f3,f4:text;

ch,ch1:char;

mn:string;

m,nerivne,m1,pa:integer;

begin

assign(f1,s1);

reset(f1);

i:=0;j:=0;

while s1[i]<>'.' do

begin

q[j]:=s1[i];q1[i]:=s1[i];

i:=i+1;j:=j+1;

end;

q[j]:=s1[i];j:=j+1;q[j]:='t';j:=j+1;q[j]:='x';j:=j+1;q[j]:='t';

q1[i]:=s1[i];q1[i+1]:='a';q1[i+2]:='s';q1[i+3]:='m';

for i:=1 to 100 do

a1[i].b:=0;

i1:=1;

assign(f2,q);

Rewrite(f2);

assign(f3,q1);

rewrite(f3);

j1:=1;k:=0;i:=1;

j:=1;

while not EOF(f1) do

begin

readln(f1,ss[j]);

a1[i].c[1]:=ss[j][1];j1:=2;ch1:=ss[j][1];

i2:=2;

while ss[j][i2]<>#0 do

begin

if (ss[j][i2]=' ')or(ss[j][i2]=';')or(ss[j][i2]='+')or(ss[j][i2]='-')or(ss[j][i2]='*')

or (ss[j][i2]='.')or(ss[j][i2]='/')or(ss[j][i2]=')')or(ss[j][i2]='(')or(ss[j][i2]=',')or(ss[j][i2]=':')

or(ss[j][i2]='=')or(ss[j][i2]='>')or(ss[j][i2]='<')or((ss[j][i2]='<')and(ss[j][i2]='>'))

or ((ss[j][i2]='=')and(ss[j][i2]='='))or(ss[j][i2]='^')

then begin

if (ch1=' ')or(ch1=';')or(ch1='+')or(ch1='-')or(ch1='*')

or (ch1='.')or(ch1='/')or(ch1=')')or(ch1='(')or(ch1=',')or(ch1=':')or(ch1='=')

or(ch1='>')or(ch1='<')or((ch1='<')and(ch1='>'))

or ((ch1='=')and(ch1='='))or(ch1='^')

then begin i:=i+1;end

Страницы: 1, 2, 3, 4, 5, 6


Новости


Быстрый поиск

Группа вКонтакте: новости

Пока нет

Новости в Twitter и Facebook

                   

Новости

© 2010.