Разработка конвертора на языке Си для перевода программ на языке Паскаль в текст программы на языке Си

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

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



ot;\n");();= tdt;1;

}fread(int ln){s[256];sp;t;();_dt();_str("scanf");();(instr[inpos]!='(') return 0;++;_str("(\"");=0;(1) {();(stype!=w_str) return 0;= vartype();(t==t_Int) put_str("%d");return 0;[sp] = '&';+= slen;(&s[sp],&instr[inpos],slen);+= slen;+= slen;();(instr[inpos]!=',') break;[sp] = instr[inpos];++;++;

}_str("\",");(&outstr[outlen],s,sp);+= sp;();(instr[inpos]!=')') return 0;++;_char(')');();(instr[inpos]!=';') return 0;++;(ln) put_str("; printf(\"\\n\");\n");put_str(";\n");1;

}fwrite(int ln){s[256];sp;t;();_dt();_str("printf");();(instr[inpos]!='(') return 0;++;_char('(');();(instr[inpos]!='\'') return 0;_char('"');++;(instr[inpos]!= '\'') {[outlen] = instr[inpos];++;++;

}++;(instr[inpos]==')')

{(ln) put_str("\\n");_char(')');++;(instr[inpos]!=';') return 0;++;_str(";\n");1;

}(instr[inpos]!=',') return 0;++;=0;(1) {();(stype!=w_str) return 0;= vartype();(t==t_Int) put_str("%d");return 0;(&s[sp],&instr[inpos],slen);+= slen;+= slen;();(instr[inpos]!=',') break;[sp] = instr[inpos];++;++;

}(ln) put_str("\\n");_char('"');();_str("\,");(&outstr[outlen],s,sp);+= sp;();(instr[inpos]!=')') return 0;++;_char(')');();(instr[inpos]!=';') return 0;++;_str(";\n");1;

}ob_arif() {();(instr[inpos]=='+'){();

}(instr[inpos]=='-'){();

}(1){();(stype==w_numb) wcopy(); else(stype==w_str&&vartype()==t_Int) wcopy(); else(stype==w_str&&vartype()==t_Label) wcopy();return 1;

}

}ob_arifmetich(){c,c1;(!ob_arif()) return 0;();= instr[inpos];= instr[inpos+1];(c=='') {+= 2;_str("!=");

}(c=='=') {++;_str("==");

}(c=='>'||c=='<') {(c1=='='){+= 2;

}wcopy();

}();(!ob_arif()) return 0;1;

}ob_logich() {k;c,c1;arifm, ip,op;(1){();= fkW();ip, op;= inpos;= outlen;= 0;(instr[inpos]=='+'||[inpos]=='('||[inpos]=='-'||==w_str&&!fkW() ||==w_numb)= ob_arifmetich();(!arifm){= ip;= op;();= fkW();(stype==w_str&&k==kw_true){();_char('1');

}(stype==w_str&&k==kw_false) {();_char('0');

}(stype==w_str&&vartype()==t_Bool) wcopy(); else(instr[inpos]=='('){();(!ob_logich()) return 0;();(instr[inpos]!=')') return 0;++;_char(')');

}return 0;

}();= fkW();(k==kw_or) put_str("||"); else(k==kw_and) put_str("&&");return 1;();

}

}asign(){type = vartype();(!(type==t_Bool||type==t_Label||type==t_Int)) return 0;_char('\n');_dt();();();((type==t_Label)&&instr[inpos]==':')

{();++;_char('\n');1;

}(instr[inpos]!=':'||instr[inpos+1]!='=')0;_char('=');+= 2;(type==t_Bool) {(!ob_logich()) return 0;

}(!ob_arif()) return 0;();(wequ("to")||wequ("downto")) return 1;(instr[inpos]!=';') return 0;();_char('\n');1;

}fbegin(int gl){rep_n = 0;(gl!=3) wskip();(gl==1) put_str("\n\nvoid main()\n");((gl!=2)||(gl!=3)) {_dt();_str("{\n");_dt();

}b;{= 1;();(IsComment()){();;

}(fkW()){kw_begin:++;(!fbegin(0)) return 0;++;;kw_write:++;(!fwrite(0)) return 0;++;;kw_writeln:++;(!fwrite(1)) return 0;++;;kw_read:++;(!fread(0)) return 0;++;;kw_readln:++;(!fread(1)) return 0;++;;kw_for:++;(!ffor()) return 0;++;;kw_function:(!ffunction()) return 0;;kw_end:++;(gl == 3) return 3;();_dt();_dt();_str("}\n");();(gl==1&&instr[inpos]=='.' ||!=1&&instr[inpos]==';'){();++;1;

}

{();0;

}0:(!asign()) return 0;;:0;

}

} while (b);1;

}Konvektor()

{b;k;= kol2 = 0;_str("#include \n\n");{= 1;();= fkW();(k==kw_var){++;(!fvar(1)) {();

}kol2++; }(k==kw_type){++;(!frecord()) {();

}kol2++;

}(k==kw_function){(!ffunction()) {();

}

}(k==kw_begin){(!fbegin(1)) {();

}= 0;

}(IsComment()) CommEnd();{++;();

};

} while (b==1);(instr[inpos]!='.') return 0;++;1;

}main()

{(LC_ALL,"Russian");

char s[128];("Введите имя входного файла: ");

scanf("%s",s);(!openText(s))

{("\nОшибка открытия файла!");

}= NULL;= NULL;= cuservars;();

osvobw(1);("\nВведите имя выходного файла:");

scanf("%s",s);(!vvodText(s))

{("\nОшибка создания файла!");

}("\nКоличество операторов"

" в исходном файле: %d", kol1);("\nКоличество операторов"

" в полученном файле: %d", kol2);("\nКоличество ошибочных операторов"

" которые не были обработаны: %d", ker);("\n\nРезультат хранится в файле: %s",s);

fclose(file1);(file2);(!kbhit()) ;

}

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

Проведем несколько тестов на анализ работоспособности получившейся программы:

Тест 1: Для анализа создадим программу, в которой есть все определяемые операторы (for(to), function, type), тип переменной integer и комментарии. Текст такой программы:

var

k,s,a: integer;

{объявление переменных}

type

rec = record

x,y: integer;

end;

(*начало функции*)pr(k: integer);i:=1 to 2 do(k);;

begin

write ('введите количество чисел числа ',s);

end.

транслятор программа паскаль алгоритм

Созданный компилятор должен определить данные заданием функции, тип переменных и комментарии.

В остальных случаях программа должна выводить на месте не определившихся операций и оставшуюся программу начиная с ошибочного оператора, помещать в коментарий. Распознавание арифметических и логических переменных происходит. Структура сохраняется.

Запустим компилятор и получим результат:

Текст в файле p.txt

#include k,s,a,i,l;

/*объявление переменных*/

struct rec

{

int x,y;

};

/*начало функции*/

void pr(int k)

{

{(=1;i<=l;i++)("%d",&k); printf("\n");

}

void main()

{

printf("введите количество чисел числа %d",s);

}

Тест 2: Пусть цикл for будет изменен с for(to) на for(downto):

var,s,a,i,l: integer;

{объявление переменных}= record,y: integer;;

(*начало функции*)pr(k: integer);i:=1 downto l do

readln(k);;('введите количество чисел числа ',s);.

Запустим компилятор и получим результат:

Текст в файле p.txt

#include k,s,a,i,l;

/*объявление переменных*/rec

{x,y;

};

/*начало функции*/pr(int k)

{

{( i=1;i<=l;i--)("%d",&k); printf("\n");

}main()

{("введите количество чисел числа %d",s);

}

Тест 3: Изменим код из файла p.txt: добавим ошибочный оператор while. Пусть теперь код программы на паскале:

var

k,s,a,i,l: integer;

{объявление переменных}

type

rec = record

x,y: integer;

end;

(*начало функции*)pr(k: integer);(l!=2)doi:=1 to 2 do(k);=l+1;;

end;('введите количество чисел числа ',s);.

Запустим компилятор и получим результат:

Текст в файле p.txt:

#include k,s,a,i,l;

/*объявление переменных*/rec

{x,y;

};

/*начало функции*/pr(int k)

{

{

(l!=2)dobedinfori:=1to2doreadln(k);

=l+1;

;

;main()

{("введите количество чисел числа %d",s);

}

Выводы

В процессе выполнения данной курсовой работы мы закрепили знания по диiиплине "Программирование на языке высокого уровня". Улучшили знания работы с файлами, циклами, ди