Транслятор на языке Си для перевода текста программы с языка Паскаль на язык Си (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);
Выводы
Таким образом, транслятор - это программа или техническое средство, выполняющее трансляцию программы.
Транслятор - в широком смысле - программа, преобразующая текст, написанный на одном языке, в текст на другом языке.
Транслятор - в узком смысле - программа, преобразующая: программу, написанную на одном (входном) языке в программу, представленную на другом (выходном) языке.
Транслятор обычно выполняет также диагностику ошибок, формирует словари идентификаторов, выдаёт для печати тексты программы и т. д.
Трансляция программы - преобразование программы, представленной на одном из языков программирования
Язык, на котором представлена входная программа, называется исходным языком, а сама программа - исходным кодом .
Понятие трансляции относится не только к языкам программирования, но и к другим компьютерным языкам , и к естественным языкам, вроде английского