محیط طراحی ویژوال که تا حالا طراحی نکردم و اگه دوستانی که تجربه دارن انجام بدن بهتره...
به جای ساخت چنین محیطی میشه ، از همون Qt Designer که نوکیا عرضه کرده استفاده کرد...
قسمت ۲ رو باید console مانند بنویسیم که از خط فرمان ورودی بگیره و ضمنا باید خیلی تروتمیز بنویسیمش که بعدا در توسعه، برای تولید کد های غیر Qt، به مشکل نخوریم...
الان دوستانی که روی ASM کار می کردن فکر می کنم بهتر باشه فعلا روی مفاهیم مربوط به کامپایلر مطالعه داشته باشن... ایده ها، روش های مرسوم، مشکلات و راه حل هاشون،... که در قسمت ۲ به کار می آد... همون سورس Libry Compiler رو هم نگاه بندازن باعث می شه یه مقدار کار دستشون بیاد...
برای این کار هم خیلی نیاز به زوم کردن رو جزیئیات نیست ، فقط کافیه فایل کد VB رو به فایل کد C++ ترجمه کینم ، یعنی دقیقا کاری که این سایت :http://www.developerfusion.com/tools...#convert-again
و نرم افزار های مشابه انجام میدن....
البته برای اینکه یک ایده برای ساخت چنین چیزی بگیرید میتونید فصل 18 کتاب C جعفر نژاد قمی رو مطالعه کنید که یک مفسر Basic نوشته شده....
یعنی اگر یه همچین چیزی داشتیم :
if x>5 then
//Condition
باید داشته باشیم :
if (x>5)
{
//ToDo
}
البته من یک نمونه نوشتم که فقط برای شرط هست (البته خیلی اصولی کار نکردم فقط برا تست بود) :
Convert_VB_C++.jpg
اینم کدش:
QTextDocument*i_document=ui->vb_txt->document();
QStringAll_vb_code=i_document->toPlainText();
//split("\tr",QString::SkipEmptyParts);
QStringListi_code_list=All_vb_code.split("\tr",QString::SkipEmptyParts);
QStringtemp_cpp_code;
QStringtemp_vb_code;
QStringcondition_txt;
QStringblock_test;
for(intcounter=0;counter<i_code_list.count();counter++)
{
//temp_cpp_code=temp_cpp_code+i_code_list.at(counter )+"\r\n";
temp_vb_code=i_code_list.at(counter);
intchk_if=temp_vb_code.indexOf("if");
intchk_then=temp_vb_code.indexOf("then");
if(chk_if>-1)
{
//temp_cpp_code=temp_cpp_code+if_block;
condition_txt=temp_vb_code.mid(chk_if+2,chk_then-2);
temp_cpp_code=temp_cpp_code+if_block+condition_open+condition_txt+condition_close+block_open;
}
}
ui->cpp_text->setText(temp_cpp_code);
البته یکسری ثابت هایی هم از قبل تعریف شده اند://KeyWord&&Token#defineif_block"if"#defineblock_open"{"#defineblock_close"}"#definecondition_open"("#definecondition_close")"