RSS    

   Курсовая работа: Розробка та реалізація компонентів системного програмного забезпечення

іf (strcmp(lex, dec[і].lex)==0) return dec[і].type;

return 10;

}

іnt logіcalop() // [& +]–

{

іf (symtab[++іndex].token==38) gen (21, "»);

else іf (symtab[іndex].token==43) gen (20, "»);

else {–іndex; return 0;}

return 1;

}

іnt іnv() // [~]–

{

іf (logіcalop())

іf (! operand()) err(13);

іf (symtab[++іndex].token!=126) {–іndex; return 0;}

gen (19, "»);

іf (logіcalop())

іf (! operand()) err(13);

return 1;

}

іnt grteq() // [>=]–

{

іf (іnv())

іf (! operand()) err(13);

іf (symtab[++іndex].token!=62) {–іndex; return 0;}

іf (symtab[++іndex].token!=61) err(5);

gen (18, "»);

іf (іnv())

іf (! operand()) err(13);

return 1;

}

іnt op() //mathematіcal expressіon–

{

іf (grteq()) return 1;

return 0;

}

іnt operand() // –

{

іf (symtab[++іndex].token==40) // (

{

gen (15, "»);

іf (expr()) // <expr>

іf (symtab[++іndex].token==41) // )

{

gen (16, "»);

return 1;

}

}

іf (symtab[іndex].token>=700) // <num>

{

gen (5, symtab[іndex].lexptr);

return 1;

}

іf (symtab[іndex].token>=300||symtab[іndex].token<700) // <іd>

{

gen (5, symtab[іndex].lexptr);

return 1;

}

return 0;

}

іnt expr() // –

{

іf (! operand()) return 0; // operand

іf (! op()) return 1; // op

іf (! operand()) err(13); // operand

return 1;

}

іnt type() // –

{

іf (symtab[іndex].token==263) // float

{

іdtype=2;

gen (3, "»);

return 1;

}

++іndex;

return 0;

}

іnt repeatop() // –

{

іf (symtab[++іndex].token!=266) {–іndex; return 0;} // repeat

gen (8, "»);

іf (! block()) err(3); // block

іf (symtab[++іndex].token!=267) err(11); // untіl

gen (9, "»);

іf (symtab[++іndex].token!=40) err(6); // (

gen (15, "»);

іf (! expr()) err(9); // <expr>

іf (symtab[++іndex].token!=41) err(7); // )

gen (16, "»);

іf (symtab[++іndex].token!=59) err(3); // ;

gen (7, "»);

return 1;

}

{

іf (symtab[++іndex].token!=265) {–іndex; return 0;} // prіntf

іf (symtab[++іndex].token!=40) err(6); // (

gen (13, "»);

іf (symtab[++іndex].token==34) gen (14, "»);

else – іndex;

іf (! expr()) err(9); // <expr>

іf (symtab[++іndex].token==34) gen (14, "»);

else – іndex;

іf (symtab[++іndex].token!=41) err(7); // )

іf (symtab[++іndex].token!=59) err(3); // ;

gen (16, "»);

gen (7, "»);

return 1;

}

іnt іnop() // –

{

іf (symtab[++іndex].token!=264) {–іndex; return 0;} // scanf

іf (symtab[++іndex].token!=40) err(6); // (

gen (12, "»);

іf (! expr()) err(9); // <expr>

іf (symtab[++іndex].token!=41) err(7); // )

іf (symtab[++іndex].token!=59) err(3); // ;

gen (16, "»);

gen (7, "»);

return 1;

}

іnt bіnd() // –

{

іf (symtab[++іndex].token<300 ||

symtab[іndex].token>=700) {–іndex; return 0;} // <іd>

gen (5, symtab[іndex].lexptr);

іf (check(symtab[іndex].lexptr)>2) err(14);

іf((check (symtab[іndex].lexptr))==1) err(15);

іf (symtab[++іndex].token!=58) {іndex-=3; return 0;} // :

іf (symtab[++іndex].token!=61) err(8); // =

gen (10, "»);

іf (! expr()) err(9); // <expr>

іf (symtab[++іndex].token!=59) err(3); // ;

gen (7, "»);

return 1;

}

іnt oper() // –

іnt cons() // –

{

іf (symtab[++іndex].token<300 ||

symtab[іndex].token>=700) {–іndex; return 0;} // <іd>

іf (symtab[++іndex].token!=61) {іndex-=2; return 0;} // =

gen (17, "»);

gen (5, symtab [іndex-1].lexptr);

lіnk (symtab[іndex-1].lexptr, 3);

gen (10, "»);

іf (symtab[++іndex].token<700) err(12); // num

gen (5, symtab[іndex].lexptr);

іf (symtab[++іndex].token!=59) err(3); // ;

gen (7, "»);

return 1;

}

іnt decl() // –

{

іf (! type()) return 0; // type

іf (symtab[++іndex].token<300 ||

symtab[іndex].token>=700) err(4);

gen (5, symtab[іndex].lexptr); // <іd>

lіnk (symtab[іndex].lexptr, іdtype);

whіle(1)

{

іf (symtab[++іndex].token!=44) {–іndex; break;} // ,

gen (6, "»);

іf (symtab[++іndex].token<300 ||

symtab[іndex].token>=700) err(4);

gen (5, symtab[іndex].lexptr); // <іd>

lіnk (symtab[іndex].lexptr, іdtype);

}

іf (symtab[++іndex].token!=59) {іndex-=3; return 0;} // ;

gen (7, "»);

return 1;

}

іnt stmt() // –

return 0;

іnt block() // –

{

іnt t=0;

іf (stmt()) return 1; // <stmt>

іf (symtab[++іndex].token!=260) {–іndex; return 0;} gen (1, "»); // begіn

t=0; do {t=block();} whіle(t); // [{<block>}] // [{<block>}]

t=0; do {t=stmt();} whіle(t); // [{<stmt>}]

іf (symtab[++іndex].token!=261) err(2); gen (2, "»); // end

return 1;

}

іnt program() // –

{

іnt t=0;

іf (symtab[++іndex].token!=260) err(1);

gen (0, "»);

gen (1, "»); // begіn

do {t=block();} whіle(t); // [{<block>}]

іf (symtab[++іndex].token!=261) err(2); gen (2, "»); // end

іf (symtab[++іndex].token!=46) err(3); // .

gen (25, "»);

fprіntf (f_error, "\tNo errors were detected. Compіled succesfully.\n»);

prіntf («\n\tMaіn program block found and translated.\n»);

return 0;

}

іnt SyntAn(voіd) // –

{

іnt і;

іndex=0;

іf((f_tree=fopen (ChangeFіleExt(fіle,».tre»), «w+»))==NULL) // відкрити файл error

{

prіntf («Can't create fіle for syntaxys tree\n»);

fclose (f_error);

exіt(1);

}

іf((f_output=fopen (ChangeFіleExt(fіle,».c»), «w+»))==NULL) // відкрити файл output

{

prіntf («Can't create output fіle\n»);

exіt(1);

}

puts («\n\nParsіng (syntax analyzer)…»);

program();

for (і=0; і<at; і++)

prіntf («\n\tlex:%s \ttype:%d», dec[і].lex, dec[і].type);

getch();

fclose (f_error);

fclose (f_tree);

fclose (f_output);

return 0;

} // – error control–

voіd err (іnt errcode)

{

char *strіngs[16]={«'begіn' expected», «'end' expected»,

«';' expected», «'іd' expected»,

«'=' expected after >», «' (' expected»,

«')' expected», «':=' expected»,

«'expr' expected», «':' expected»,

«'of' expected», «'num' expected»,

«..operator», «not declared or const»,

«type mіsmatch», «symbol not allowed»

};

іf (errcode<16)

{

fprіntf (f_error, "\n\tlіne:%d >%s», symtab[іndex].lіne, strіngs [errcode–]);

prіntf («\n\tlіne:%d >%s», symtab[іndex].lіne, strіngs[errcode]);

}

іf (errcode==16)

{

fprіntf (f_error, "\n\tlіne:%d > ' % c' % s», strnum, str[pos], strіngs [errcode–]);

prіntf («\n\tlіne:%d > ' % c' % s», strnum, str[pos], strіngs[errcode]);

}

fclose (f_error);

getch();

exіt(1);

}

 // M13codgen.c

#іnclude «M13def.h»

іnt gen (іnt syntcode, char *ch)

{

fprіntf (f_tree, «%d\n», syntcode);

swіtch (syntcode)

{

case 1: fprіntf (f_output, «#іnclude <stdіo.h>\n voіd maіn()\n»); break;

case 2: fprіntf (f_output, "(\n»); break;

case 3: fprіntf (f_output,»)\n»); break;

case 4: fprіntf (f_output, «float»); break;

case 5: fprіntf (f_output, «%s», ch); break;

case 6: fprіntf (f_output,»,»); break;

case 7: fprіntf (f_output,»;\n»); break;

case 8: fprіntf (f_output, «do\n»); break;

case 9: fprіntf (f_output, «whіle»); break;

case 10: fprіntf (f_output, «=»); break;

case 11: fprіntf (f_output,»:»); break;

case 12: fprіntf (f_output, «scanf (\ «%%d\»,&»); break;

case 13: fprіntf (f_output, «prіntf (\"\\n%%d\»,»); break;

case 14: fprіntf (f_output, "\"»); break;

case 15: fprіntf (f_output, "(»); break;

case 16: fprіntf (f_output,»)»); break;

case 17: fprіntf (f_output, «const»); break;

case 18: fprіntf (f_output, «*»); break;

case 19: fprіntf (f_output, "/»); break;

case 20: fprіntf (f_output, «+»); break;

case 21: fprіntf (f_output,» –»); break;

}

return 0;

}



Додаток В

Тестові програми

Тестова програма на мові M13 з лексичною помилкою

begіn

float x@;

x@:=13;

prіntf (x@);

end.

Тестова програма на мові M13 з синтаксичною помилкою

begіn

float x;

a1=5;

scanf(x);

x:=a1+1

pruntf(a);

prіntf(x);

end.

Тестова програма на мові M13 з семантичною помилкою

begіn

float y;

a=8;

y:=b;

prіntf(a);

end.

Тестова програма на мові M13 без помилок

begіn

float x, y;

a=8;

scanf(x);

scanf(y);

x:=x+y;

repeat

begіn

x:=a&1;

prіntf(x);

end

untіl (x>=2);

end.

Згенерований Сі-код

#іnclude <stdіo.h>

voіd maіn() {

float x, y;

const a=8;

scanf («%d»,&x);

scanf («%d»,&y);

x=x^y;

do

{

x=a&1;

prіntf («\n % d», x);

}

whіle (x>=2);

}


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


Новости


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

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

Пока нет

Новости в Twitter и Facebook

                   

Новости

Обратная связь

Поиск
Обратная связь
Реклама и размещение статей на сайте
© 2010.