Разработка программы-интерпретатора, способной получать на входе текстовый файл (в формате 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.