Создание программы-интерпретатора для обработки исходных текстов программ, выполняющих действия над комплексными числами - Курсовая работа

бесплатно 0
4.5 227
Разработка программы-интерпретатора, способной получать на входе текстовый файл (в формате ASCII или ANSI) с текстом программы и на выходе выводить на экран результаты вычислений, определяемых программистом. Выбор лексем, интерфейс и листинг программы.

Скачать работу Скачать уникальную работу

Чтобы скачать работу, Вы должны пройти проверку:


Аннотация к работе
Например, X=0.06 Выражения записываются по правилам, Например, F=-X/0.01 б) вывод результатов на экран PRINT (Имя Переменной) или PRINT (выражение) Например, PRINT(X) и PRINT(X F) в) Операндами выражения могут быть вещественные числа и имена объявленных ранее переменных. В окне Object Inspector для OpenDialog1 в пункте Filter нажимаем на кнопку и устанавливаем необходимые фильтры. *.txt - Отображать файлы с расширением TXT *.* - Отображать все файлы Результатом обработки текста программы является вывод в окне интерпретатора результата вычисления, либо сообщения об ошибке. 3.2 Листинг программы Unit1.cpp #include #pragma hdrstop #include Unit1.h //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource *.dfm TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Open1Click(TObject *Sender) { OpenDialog1->Options.Clear(); OpenDialog1->Options Execute()) RichEdit1->Lines->LoadFromFile(OpenDialog1->FileName); } //--------------------------------------------------------------------------- void __fastcall TForm1::Calculate1Click(TObject *Sender) { char *code; char buffer[1024]; code = RichEdit1->Lines->GetText(); CodeBuffer *cb = parser_codebuffer_new(code); /* Вычислить выражения */ ParserVal v1 = parser_evaluate(cb); /* Напечатать результат выполнения операции */ RichEdit1->Lines->Add((v1.error)); /* Важно: Обязательно освободить массив значений v1 */ parser_value_free(&v1); /* Освободить буфер кода и список переменных */ parser_codebuffer_destroy(cb); /* И освободить cb */ free(cb); } void __fastcall TForm1::Variable_print_all(ParserVariable *variables[]) { if (!variables) return; size_t i; char buffer[1024]; for (i=0; ival.type) { case TOK_NUMERIC: sprintf (buffer,%s=%s

,var->name, parser_value_show_as_string(&var->val)); RichEdit1->Lines->Add (buffer); break; case TOK_STRING: sprintf (buffer,%s=%s

,var->name, var->val.s); RichEdit1->Lines->Add (buffer); break; default: sprintf(buffer, %s Имеет неизвестный тип переменной%d.

, var->name, var->val.type); RichEdit1->Lines->Add (buffer); break; } } } //--------------------------------------------------------------------------- void __fastcall TForm1::Exit1Click(TObject *Sender) { Close(); } Parser.cpp #include lexer.h #include parser.h #include Unit1.h #ifndef M_PI #define M_PI 3.14159265358979323 #endif ParserVal parser_statements(CodeBuffer *cb); ParserVal parser_assign(CodeBuffer *cb); void do_sqrt(ParserVal *a, int b); void do_abs(ParserVal *, int); void do_exp(ParserVal *, int); void do_ln(ParserVal *, int); void do_pow(ParserVal *, int); void do_integer(ParserVal *, int); void do_round(ParserVal *, int); void do_fraction(ParserVal *, int); void do_boolean_str(int oper, ParserVal *v1, ParserVal *v2); void do_boolean(int oper, ParserVal *v1, ParserVal *v2); void do_math(int oper, ParserVal *v1, ParserVal *v2); void do_unary(int oper, ParserVal *v1); void do_power(ParserVal *v1, ParserVal *v2); void parser_do_print(ParserVal *, int); BuiltinFunction g_function_table[] = { /* Массив внутренних функций */ {sqrt, 1, do_sqrt}, {abs, 1, do_abs}, {exp, 1, do_exp}, {ln, 1, do_ln}, {pow, 2, do_pow}, {print, 1, parser_do_print}, {int, 1, do_integer}, {modf, 1, do_fraction} }; BuiltinFunction *lookup_builtin_function(char *name); char *builtin_function_arg_text(BuiltinFunction *func); size_t parser_strlen(char *s); ParserVal execute_builtin_function(CodeBuffer *cb, BuiltinFunction *func); ParserVal parser_bool_or(CodeBuffer *cb); ParserVal parser_bool_and(CodeBuffer *cb); ParserVal parser_bool1(CodeBuffer *cb); ParserVal parser_bool2(CodeBuffer *cb); ParserVal parser_bool3(CodeBuffer *cb); ParserVal parser_level1(CodeBuffer *cb); ParserVal parser_level2(CodeBuffer *cb); ParserVal parser_level3(CodeBuffer *cb); ParserVal parser_level4(CodeBuffer *cb); ParserVal parser_level5(CodeBuffer *cb); void parser_error(CodeBuffer *cb, char *msg, int opt); void parser_convert_to_numeric(ParserVal *v); void parser_convert_to_string(ParserVal *v); int is_numeric(ParserVal *v); int is_string(ParserVal *v); int str_icmp(char *s1, char *s2); void parser_add_strings(ParserVal *v1, ParserVal *v2); double get_int_part(double x); double round_num(double d, unsigned int dec_places); /* Хранение глобальных tokenов для функций которые не анализируют их */ TokenRec currToken; ParserVal parser_evaluate(CodeBuffer *cb) { /* Начало parsingа для col 0, line 1 */ cb->curr_pos = 0; cb->line_num = 1; memset(cb->char_backbuf, \0, MAX_CHAR_BACKBUF_LEN); cb->tok_backbuf_count = 0; parser_variable_add_standard_constants(cb); ParserVal v1 = parser_statements(cb); /* Необходимо освободить v1 после использования.

Вы можете ЗАГРУЗИТЬ и ПОВЫСИТЬ уникальность
своей работы


Новые загруженные работы

Дисциплины научных работ





Хотите, перезвоним вам?