Транслятор на языке Си для перевода текста программы с языка Паскаль на язык Си (integer, repeat тАж until, procedure, type, record (для type))

Дипломная работа - Компьютеры, программирование

Другие дипломы по предмету Компьютеры, программирование

p>asign(){

int type = type_reciever();

if (!(type==tpe_bool||type==tpe_int)) return 0;

put_dt();

copyit();

GetTokens();

if (InArray[inpointer]!=':'||InArray[inpointer+1]!='=')

return 0;

putChrw('=');

inpointer += 2;

if (type==tpe_bool) {

if (!fle()) return 0;

}

else

if (!fae()) return 0;

GetTokens();

if (InArray[inpointer]!=';') return 0;

copyit();

putChrw('\n');

return 1;

}

frepeat() {

skipit();

put_dt();

putSrtw("do {\n");

inc_dt();

return 1;

}

funtil() {

skipit();

dec_dt();

put_dt();

putSrtw("} while (");

if (!fle()) return 0;

putChrw(')');

GetTokens();

if (InArray[inpointer]!=';') return 0;

inpointer++;

putSrtw(";\n");

return 1;

}

fbegin(int globalVar1){

int rep_n = 0;

if(globalVar1!=3) skipit();

if (globalVar1==1) putSrtw("\n\nvoid main()\n");

if ((globalVar1!=2)||(globalVar1!=3)) {

put_dt();

putSrtw("{\n");

inc_dt();

}

int b;

do{

b = 1;

GetTokens();

if (fcomment()){

fcommend();

continue;

}

switch(isthsKWD()){

case kwqe_begin:

firstFl1++;

if (!fbegin(0)) return 0;

secFl2++;

break;

case kwqe_repeat:

firstFl1++;

rep_n++;

if (!frepeat()) return 0;

break;

case kwqe_until:

if (rep_n>0){

rep_n--;

if (!funtil()) return 0;

secFl2++;

}

else return 0;

break;

case kwqe_procedure:

if (!fprocedure()) return 0;

break;

case kwqe_end:

firstFl1++;

if(globalVar1 == 3) return 3;

skipit();

dec_dt();

put_dt();

putSrtw("}\n");

GetTokens();

if (globalVar1==1&&InArray[inpointer]=='.' ||

globalVar1!=1&&InArray[inpointer]==';'){

skipit();

secFl2++;

return 1;

}

else

{

skipit();

return 0;

}

case 0:

if (!asign()) return 0;

break;

default:

return 0;

}

} while (b);

return 1;

}

main_prgrm()

{

int b;

int k;

firstFl1 = secFl2 = 0;

putSrtw("#include \n\n");

do{

b = 1;

GetTokens();

k = isthsKWD();

if (k==kwqe_var){

firstFl1++;

if (!fvar(1)) {

err_or();

}

else secFl2++; }

else

if (k==kwqe_type){

firstFl1++;

if (!frecord()) {

err_or();

}

else secFl2++;

}

else

if (k==kwqe_procedure){

if (!fprocedure()) {

err_or();

}

}

else

if (k==kwqe_begin){

if (!fbegin(1)) {

err_or();

}

b = 0;

}

else

if (fcomment()) fcommend();

else {

firstFl1++;

err_or();

};

} while (b==1);

if (InArray[inpointer]!='.') return 0;

inpointer++;

return 1;

}

main()

{

setlocale(LC_ALL,"Russian");

char s[128];

printf("Выберите файл для трансляции: ");

scanf("%s",s);

if (!inTxt(s))

{

printf("\nПроизошла ошибка при открытии!");

getch();

return;

}

v_lst = NULL;

lv_lst = NULL;

main_prgrm();

list_clearer(1);

printf("\nВведите имя для записи результата:");

scanf("%s",s);

if (!outTxt(s))

{

printf("\nПроизошла ошибка при создании файла!");

getch();

return;

}

printf("\nВо входном файле было %d операторов", firstFl1);

printf("\nВ новый файл эквивалентно %d перенесено", secFl2);

printf("\n Ошибочных: %d", errFl3);

printf("\n\nРезультат в файле: %s",s);

fclose(spasfl);

fclose(ccfl);

while (!kbhit()) ;

}

6Распечатка тестов и результатов

Пример ошибочного ввода:

Фходной файл 5.pas:

(* New Programm *)

{ Variant 5 }

f:boolean;

r: integer;

testpr(var a:integer);i,j:integer;

begin

repeat

r:=i+3*8;

r:=r+3*8;

until ((a<9 and a<3) or true);

end;:= r=1;.

Вид экрана:

Результат обработки:

#include

/* New Programm */

/* Variant 5 */f;r;

testpr(int & a)

{

int i,j;

{

do {

r=i+3*8;

r=r+3*8;

} while (((a<9&&a<3)||1));

}

void main()

{

f=r==1;

}

Пример файла с ошибочным оператором:

(* New Programm *)

{ Variant 5 }

f:boolean;

r: integer;

testpr(var a:integer);i,j:integer;

begin

repeat

r:=i+3*8;

r:=r+3*8;

until ((a<9 and a<3) or true);

end;:= r=1;(x);

end.

Вид экрана:

Результат работы:

#include

/* New Programm */

/* Variant 5 */f;r;

testpr(int & a)

{

int i,j;

{

do {

r=i+3*8;

r=r+3*8;

} while (((a<9&&a<3)||1));

}

void main()

{

f=r==1;

(x);

Выводы

Таким образом, транслятор - это программа или техническое средство, выполняющее трансляцию программы.

Транслятор - в широком смысле - программа, преобразующая текст, написанный на одном языке, в текст на другом языке.

Транслятор - в узком смысле - программа, преобразующая: программу, написанную на одном (входном) языке в программу, представленную на другом (выходном) языке.

Транслятор обычно выполняет также диагностику ошибок, формирует словари идентификаторов, выдаёт для печати тексты программы и т. д.

Трансляция программы - преобразование программы, представленной на одном из языков программирования

Язык, на котором представлена входная программа, называется исходным языком, а сама программа - исходным кодом .

Понятие трансляции относится не только к языкам программирования, но и к другим компьютерным языкам , и к естественным языкам, вроде английского