-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
نه ما متکی به API ویندوز نیستیم، یا به Interrupt خاص یا هر چیز دیگه ای.
هر سیستمی API ها و Interrupt های خاص خودشو داره. ما یه تابع می نویسیم برای سیستم های مختلف که اگه Windows بود از فلان چیز استفاده کنه، اگه Linux بود از یه چیز دیگه... .
یعنی این که نهایتا از چه چیزی استفاده شه به عهده ی کامپایلر هست بر اساس درخواست کاربر.
حتی زبان ++C هم همین کارو می کنه.
یعنی تو یه کد می نویسی و از توابع یکسانی استفاده می کنی، در صورتی که خروجی ها بر اساس کامپایلر ها در محیط های مختلف متفاوت هست.
اگه می خوایم مثل ++C کار کنیم، پس باید یه روشی بذاریم که برنامه نویس اون روال، به کامپایلر بگه اگه برای این سیستم کامپایل می کنی این کد رو بزن، برای اون سیستم اون یکی کد رو بزن... مثل # در ++C که فقط با کامپایلر صحبت می کنه. مثلا فرض کن این طوری:
#if system = DOS
{
...
int 21h
}
elseif system = Windows
{
...
WriteConsole ...
}
else
{
...
}
که این if ها در زمان اجرا، اجرا نمی شن و در زمان Compile پردازششون به عهده ی Pre-Processor هست.
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
ببین من فکر میکنم که فعلآ نباید بحث استفاده از توابع API مربوط به OS رو به میان میاوردی. ما باید یک ساختاری درست کنیم که برنامه نویس بتونه
با ورودی خروجی (که شامل فایل هم میشه) کار کنه و لزومی نداره که کاربر در برنامه از توابع os استفاده کنه. به نظر من بهترین کار اینه که ما
مثل سی تعریف توابع یا حتی فقط مشخصات توابع ورودی خروجی رو در یک فایل سرایند یا کتابخانه ذخیره کنیم و کاربر بتونه با به کار بردن این فایل
از توابع ورودی خروجی استفاده کنه و این که در نهایت اجرای دستورات ورودی خروجی به چه شکل باشه بستگی به کامپایلر ما و کد ماشینی که در عقب بندی تولید میشه داره
و لزومی نداره کاربر از اون مطلع باشه.
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
در ضمن به نظر من بهتر بود اول یه زبان پایه رو با دستورات اصلی بنا میزاشتیم و اگر تونستیم اون رو به اتمام برسونیم
یعنی تحلیلگر نحوی و معنایی و دیگر مراحل کامپایلر رو که میتونه خیلی دشوار باشه رو پیاده کنیم, اونوقت میتونستیم به فکر
توسعه زبان باشیم (تعریف نوع , استفاده از API , سرایند, کتابخانه,شی گرایی , برنامه نویسی گرافیکی ووووو......). چون اکثر زبانها هم یک چنین مسیری رو طی کردند.
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
نقل قول:
نوشته شده توسط
amin32
ببین من فکر میکنم که فعلآ نباید بحث استفاده از توابع API مربوط به OS رو به میان میاوردی. ما باید یک ساختاری درست کنیم که برنامه نویس بتونه
با ورودی خروجی (که شامل فایل هم میشه) کار کنه و لزومی نداره که کاربر در برنامه از توابع os استفاده کنه. به نظر من بهترین کار اینه که ما
مثل سی تعریف توابع یا حتی فقط مشخصات توابع ورودی خروجی رو در یک فایل سرایند یا کتابخانه ذخیره کنیم و کاربر بتونه با به کار بردن این فایل
از توابع ورودی خروجی استفاده کنه و این که در نهایت اجرای دستورات ورودی خروجی به چه شکل باشه بستگی به کامپایلر ما و کد ماشینی که در عقب بندی تولید میشه داره
و لزومی نداره کاربر از اون مطلع باشه.
خوب شما فرض کن ما بحث توابع و ...، رو از برنامه نویس بپوشونیم. حالا قراره این چیزا رو داخل یه فایل سرآیند قرار بدیم. اون فایل هم توابع و روال هایی داره که با زبان برنامه نویسی خودمون ساخته شدن. اون ها باید با چی ساخته می شدن؟ یعنی پایه ای ترین دستورات برای ساخت دستورات سطح بالاتر (کار با فایل و ورودی و خروجی متن و ...) چیان؟ مسلما دستورات Assembly هستن. زبان C رو هم اگه بدون فایل های سرآیندش در نظر بگیری، باز هم قابل استفادس، چون خود فایل های سرآیندش در نهایت با دستورات پایه ای تری نوشته شدن، که شما می تونی اونا رو داخل برنامه ی خودتم بنویسی. منم می گم این کارو کنیم. یعنی در ابتدا هیچ دستور خاصی برای زبان قرار ندیم (برعکس BASIC)، بلکه این قابلیت رو به برنامه نویس (کسی که فایل های سرآیند رو می نویسه یا هر کس دیگه ای) بدیم که این دستورات (نوشتن و خواندن و ...) رو بنویسه، با دستورات پایه ای تر زبان (مثل زبان C).
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
به نظر من ملزومات یک زبان برنامه نویسی تحت کنسول اینها هستند:
۱- ساختار تعریف متغیر
۲- ساختار تعریف توابع
۳- ساختار نحوی عملگرها و دستورات محاسباتی
۴- ساختارهای شرطی
۵- ساختار حلقه و تکرار
و البته دستورات ورودی خروجی
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
نقل قول:
نوشته شده توسط
amin32
در ضمن به نظر من بهتر بود اول یه زبان پایه رو با دستورات اصلی بنا میزاشتیم و اگر تونستیم اون رو به اتمام برسونیم
یعنی تحلیلگر نحوی و معنایی و دیگر مراحل کامپایلر رو که میتونه خیلی دشوار باشه رو پیاده کنیم, اونوقت میتونستیم به فکر
توسعه زبان باشیم (تعریف نوع , استفاده از API , سرایند, کتابخانه,شی گرایی , برنامه نویسی گرافیکی ووووو......). چون اکثر زبانها هم یک چنین مسیری رو طی کردند.
قبول دارم که زبان ها اول اصلشون ساخته شده بعد توسعه پیدا کردن و مثلا فایل های سرآیند براشون نوشته شده. ولی این ساده تره که ما هیچ دستوری رو ننویسیم به طور پیش فرض، بلکه کاربر (مثلا موقع توسعه) خودش بیاد اون دستورات جورواجور رو تولید کنه. فقط کافیه مثل زبان C اجازه بدیم که کد Assembly بزنه.
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
نقل قول:
و البته دستورات ورودی خروجی
به جای این گزینه می شد گفت دستورات پایه.
با دستورات پایه ای Assembly می شه دستورات ورودی و خروجی رو پیاده سازی کرد.
دیگه این بستگی به سلیقه ی ما داره که دستورات پایه ای مون چیا باشن...
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
نقل قول:
نوشته شده توسط
IamOverlord
قبول دارم که زبان ها اول اصلشون ساخته شده بعد توسعه پیدا کردن و مثلا فایل های سرآیند براشون نوشته شده. ولی این ساده تره که ما هیچ دستوری رو ننویسیم به طور پیش فرض، بلکه کاربر (مثلا موقع توسعه) خودش بیاد اون دستورات جورواجور رو تولید کنه. فقط کافیه مثل زبان C اجازه بدیم که کد Assembly بزنه.
من که هر چقدر توی فایلهای سرایند پر استفاده زبان سی گشتم دستور اسمبلی ندیدم و بیشتر تعریف مشخصات توابع. البته مطمعن نیستم.
ولی فکر میکنم بیشتر دستورات اسمبلی در مواقعی به کار میاد که نشه از دستورات زبان استفاده کرد. مثل وقتی که بحث ساخت کرنل به میان میاد. باید بیشتر تحقیق کرد.
وای برم که بازی تیمم شروع شد. انشاالله که این دفعه رو میبریم....:تشویق:
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
در پوشه ی Include خوب بگردی پیدا می کنی.
البته چون اکثرشون به هم دیگه پاس می دن (کدوم تیم؟ :لبخند:) کم تر دستورات Assembly می بینی. ولی برای نمونه، آخر این header file رو نگاه کن:
// --aclcls.h------------------------------------------------------------------
//
// Interface to library: aclcls.
//
// Copyright 1986 - 1998 Microsoft Corporation. All rights reserved.
//
// ----------------------------------------------------------------------------
#if !defined(_ACLCLS_H_)
#define _ACLCLS_H_
// $$--IExchangeFolderACLs-----------------------------------------------------
//
// Definition of interface for folder ACLs class CFolderACLs.
//
// ----------------------------------------------------------------------------
#undef INTERFACE
#define INTERFACE IExchangeFolderACLs
// Manifest for cursor position indicating we are at the end of the ACLs table.
#define ACL_PAST_END ((LONG) -1)
// Special ACL positions. The special ACL's at these position may not be
// deleted, and there are also special rules (coming from Exchange) with
// regard to how rights will be modified. Also, other ACL's may not be inserted
// at these positions.
#define ACL_POS_DEFAULT ((LONG) 0)
#define ACL_POS_CREATOR ((LONG) 1)
DECLARE_INTERFACE_(IExchangeFolderACLs, IUnknown)
{
#ifndef NO_BASEINTERFACE_FUNCS
/* IUnknown methods */
STDMETHOD(QueryInterface)(
THIS_
REFIID riid,
LPVOID FAR * ppvObj
) PURE;
STDMETHOD_(ULONG, AddRef)(
THIS
) PURE;
STDMETHOD_(ULONG, Release)(
THIS
) PURE;
#endif
/* IExchangeFolderACLs methods */
STDMETHOD(HrDelete)(
THIS
) PURE;
STDMETHOD(HrGet)(
THIS_
LPLONG lplRights,
LPSTR FAR * lppszDisplayName,
ULONG FAR * lpcbentryid,
LPENTRYID FAR * lppentryid
) PURE;
STDMETHOD(HrInsert)(
THIS_
LONG lRights,
LPSTR lpszDisplayName,
ULONG cbentryid,
LPENTRYID lpentryid,
LPLONG lplRights
) PURE;
STDMETHOD(HrModify)(
THIS_
LONG lRights,
LPLONG lplRights
) PURE;
STDMETHOD(HrSeek)(
THIS_
LONG lPos
) PURE;
STDMETHOD(HrTell)(
THIS_
LPLONG lplPos
) PURE;
};
// $$--LPFOLDERACLS------------------------------------------------------------
//
// Pointer to IExchangeFolderACLs interface.
//
// ----------------------------------------------------------------------------
typedef IExchangeFolderACLs FAR * LPFOLDERACLS;
//
// Helper functions defined in module ACLCLS.
//
// $--HrFolderACLsOpen---------------------------------------------------------
//
// DESCRIPTION: Get a pointer to an object which implements the
// IExchangeFolderACLs interface defined in aclcls.h.
//
// INPUT:
//
// [lpSession] -- Pointer to MAPI session.
// [lpMDB] -- Pointer to message store containing folder.
// [cbentryid] -- Number of bytes in folder's entry identifier.
// [lpentryid] -- Folder's entry identifier.
//
// OUTPUT:
//
// [lppFolderACLs] -- Pointer to object which supports interface.
// NULL if none.
//
// RETURNS: NOERROR if successful;
// E_INVALIDARG if bad input;
// E_OUTOFMEMORY if not enough memory;
// E_NOINTERFACE if acl table does not exist on folder;
// E_FAIL otherwise.
//
//-----------------------------------------------------------------------------
STDAPI
HrFolderACLsOpen( // RETURNS: HRESULT
IN LPMAPISESSION lpSession, // MAPI session pointer
IN LPMDB lpMDB, // MAPI MDB store ptr
IN ULONG cbentryid, // # bytes in entry ID
IN LPENTRYID lpentryid, // entry ID ptr
OUT LPFOLDERACLS FAR * lppFolderACLs // IExchangeFolderACLs ptr ptr
);
#endif
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
نقل قول:
۱- ساختار تعریف متغیر
۲- ساختار تعریف توابع
۳- ساختار نحوی عملگرها و دستورات محاسباتی
۴- ساختارهای شرطی
۵- ساختار حلقه و تکرار
1 و 2 رو تا یه حدودایی مشخص کردیم.
در مورد 3،
مثلا اینو ببین:
f : Boolean
a : Integer = 13
b : Integer = 33
f = (a = b)? ' = true
f = Not (a > b)? ' = not false =true
f = (a < b and b = a)? ' = false
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
فکر کنم دیگه باختیم...:گریه::گریه::گریه:
نقل قول:
نوشته شده توسط
IamOverlord
1 و 2 رو تا یه حدودایی مشخص کردیم.
در مورد 3،
مثلا اینو ببین:
f : Boolean
a : Integer = 13
b : Integer = 33
f = (a = b)? ' = true
f = Not (a > b)? ' = not false =true
f = (a < b and b = a)? ' = false
خب در مورد عملگرها و دستورات هم قبلآ تا حدودی صحبت شد.
اما در مورد دستورات شرطی نظرم اینه:
if (i>10):
i=i+1
end if
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
بیش تر Symbol ها هستن که تو ++C دست و پا گیرن، به نظرم ساختار if زبان BASIC یکی از بهترین ساختار ها هست. (ببخشید این قدر مخالفت می کنما ولی... دیگه دیگه...)
' Simple If Structure
If Statement Then Beep()
' Complete If Structure
If Statement1 Then
ElseIf Statement2 Then
ElseIf Statement3 Then
Else
End If
حالا می تونیم اینو کامل ترش کنیم البته اگه بشه.
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
نه پشیمون شدم! به خاطر یکپارچگی با ?(...) ، بهتره از If (...) Then استفاده کنیم نه If ... Then.
نقل قول:
نوشته شده توسط
amin32
فکر کنم دیگه باختیم...:گریه::گریه::گریه:
من فکر کردم پروژه رو می گی...! :لبخند:
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
نقل قول:
نوشته شده توسط
IamOverlord
بیش تر Symbol ها هستن که تو ++C دست و پا گیرن، به نظرم ساختار if زبان BASIC یکی از بهترین ساختار ها هست. (ببخشید این قدر مخالفت می کنما ولی... دیگه دیگه...)
' Simple If Structure
If Statement Then Beep()
' Complete If Structure
If Statement1 Then
ElseIf Statement2 Then
ElseIf Statement3 Then
Else
End If
حالا می تونیم اینو کامل ترش کنیم البته اگه بشه.
این یکم زیادی شبیه خود بیسیک نشده؟ اگه دقت کنی پیشنهاد منم تقریبآ همین بود با این تفاوت که بجای then از ':' استفاده کنیم.
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
من تا جایی که دیدم زبان های دیگه ای هم هستن که ساختارشون مثل اینه (این قدر ساختار توپیه!)؛
مثلا این جا رو حتما ببین برای Ada هست.
این جا هم برای Fortran هست.
تازه، می ریم جلو زبان ساخته می شه انشاا... ، بعد بر می گردیم دوباره یه تغییرات جزئی روی Syntax می دیم و اگه ایده ی جدید و بهتری داشتیم پیاده می کنیم.
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
نقل قول:
نوشته شده توسط
IamOverlord
من تا جایی که دیدم زبان های دیگه ای هم هستن که ساختارشون مثل اینه (این قدر ساختار توپیه!)؛
مثلا
این جا رو حتما ببین برای Ada هست.
این جا هم برای Fortran هست.
تازه، می ریم جلو زبان ساخته می شه انشاا... ، بعد بر می گردیم دوباره یه تغییرات جزئی روی Syntax می دیم و اگه ایده ی جدید و بهتری داشتیم پیاده می کنیم.
من فقط نظرم این بود که به جای then از یه لغت یا علامت دیگه استفاده بشه. ولی اشکالی نداره اگه اینطوری می خوای با همین پیش میریم.
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
ساختار های غیر از if چی؟
اگه بشه یه جوری همشون رو یکپارچه و منظم کرد خیلی خوب می شه... :متفکر:
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
به خودم امیدوار شدم.فکر میکردم فقط من اینقدر بیخوابم.:قهقهه:
خب تا منظورت از یکپارچگی چی باشه؟
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
ساختار Select Case چه طور باشه؟ :متفکر:
' halqeye bi nahayat:
Do
Loop
' sakhtare while
While (...) Do
Loop
' sakhtare until
Until (...) Do
Loop
' sakhtare for e sade
For i : 1 To 10 Do
Loop
' sakhtare for ba step
For i : 10 To 1 Step -1 Do
Loop
' sakhtare select
Select ...
Case ...
Case ...
Case Else
End Select
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
منظورم از یکپارچگی همون ساختار Do Loop پست بالا هست. اگه دقت کنی ساختار های For، While و Until کامل شده ی Do Loop هستند.
یه سوالی: می تونیم در زبانمون یه مفهومی به نام مجموعه تعریف کنیم و For رو به اون ربط بدیم؟ (برای یکپارچگی بیشتر! :لبخند::قهقهه:)
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
نقل قول:
نوشته شده توسط
IamOverlord
منظورم از یکپارچگی همون ساختار Do Loop پست بالا هست. اگه دقت کنی ساختار های For، While و Until کامل شده ی Do Loop هستند.
خوب اگه منظورت این باشه , باید بگم که این به فکر بیشتری نیاز داره.:متفکر:
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
آها، یه مسئله ای:
بیرون اومدن از ساختار های For، While و ... ؟ :لبخند:
(یکپارچه!)
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
اگه منظورت از بیرون اومدن دستوری مثل exit for هست , من میگم که یکپارچه باشه
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
باشه. ضمنا یه مزیتی که ++C داره این هست که می شه در ساختار Switch اش تعیین کرد که همه ی Case ها رو بررسی کنه یا این که از فلان Case به بعد در صورت برقراری دیگه بررسی نکنه. می خوام این قابلیت رو ما هم بذاریم. در کل می خوام یه سری از ویژگی های خوب زبان ++C رو بذاریم.
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
نقل قول:
نوشته شده توسط
IamOverlord
باشه. ضمنا یه مزیتی که ++C داره این هست که می شه در ساختار Switch اش تعیین کرد که همه ی Case ها رو بررسی کنه یا این که از فلان Case به بعد در صورت برقراری دیگه بررسی نکنه. می خوام این قابلیت رو ما هم بذاریم. در کل می خوام یه سری از ویژگی های خوب زبان ++C رو بذاریم.
همون قضیه دستور break دیگه. آره فکر خوبیه.
صبح شد :قهقهه:
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
فقط یه نکته ای. چون من دانشجو هستم فقط تا همین یک ماه آینده وقت آزاد دارم و بعد اون
با عرض شرمندگی وقتم محدودتر میشه. اینو گفتم که در جریان باشید تا یکم زودتر به پیاده سازی بپردازیم.
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
:قهقهه:
پس Break روی اینا تاثیر بذاره:
- ساختار Select
- ساختار Do Loop کلا، که شامل For، While و ... می شه.
اما مثالی از روش کار:
Break 3
که می گه 3 بار Break کن پشت سر هم.
به جای 3 اگه عدد ثابت بذاره که مشکلی نیست ولی اگه متغیر بذاره :ناراحت:. پس متغیر نذاره. اصلا واسه چی بذاره؟ کاربرد زیادی نداره. زبان های دیگه هم یادم نمی آد که همچین امکانی رو برای متغیر گذاشتن، در نظر گرفته باشن. می تونه از Goto استفاده کنه، یا همون Jump در Assembly. ببین اگه کد Assembly بدون Block و از این حرفا نوشته می شه، دستور Jump به تنهایی به کارش می آد و لازم نیست دوباره Goto رو تعریف کنیم.
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
در مورد اسمبلی یه مشکل بزرگ رو در نظر نگرفتی. اگه زبان ما از اسمبلی به شکل inline استفاده کنه , اونوقت باید ساختار لغوی و نحوی زبان اسمبلی رو هم پیاده سازی کنیم !!!!!!!!
یعنی دو تا زبان که خیلی پیچیده میشه. به این دلیله که میگم این مسائل رو بزاریم برای مرحله توسعه زبان.
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
نقل قول:
نوشته شده توسط
IamOverlord
:قهقهه:
پس Break روی اینا تاثیر بذاره:
- ساختار Select
- ساختار Do Loop کلا، که شامل For، While و ... می شه.
آره. البته لزومی نداره که از همه این دستورات و با همین ساختار لغوی استفاده بشه و بهتر که دنبال یه ساختار جدیدتر یا با لغاتی متفاوت باشیم (منظورم از لغت مثلا کلمه loop یا کلمات دیگه هست)
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
نقل قول:
نوشته شده توسط
amin32
در مورد اسمبلی یه مشکل بزرگ رو در نظر نگرفتی. اگه زبان ما از اسمبلی به شکل inline استفاده کنه , اونوقت باید ساختار لغوی و نحوی زبان اسمبلی رو هم پیاده سازی کنیم !!!!!!!!
یعنی دو تا زبان که خیلی پیچیده میشه. به این دلیله که میگم این مسائل رو بزاریم برای مرحله توسعه زبان.
نه ما دستورات Assembly رو بدون هیچ پردازشی (یا با حداقل پردازش ممکن!) می دیم به Assembler مشکلی نداره...:متفکر: ضمنا دستورات Assembly تجزیه و تحلیل پیچیده ای برای Compiler ندارن...
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
نقل قول:
0- دستورات Assembly
۱- ساختار تعریف متغیر
۲- ساختار تعریف توابع
۳- ساختار نحوی عملگرها و دستورات محاسباتی
۴- ساختارهای شرطی
۵- ساختار حلقه و تکرار
4 و 5 ارتباط نزدیکی با هم دارن، به خاطر همین می گم یکپارچه باشن.
While/Until
Select Case
For
If
و ... ؟
چه قدر تاپیک خلوته، ای کاش بقیه هم مشارکت کنن...!
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
برای Dynamic Allocation هم فهمیدم باید چی کار کنیم!!! می تونی یه جست و جویی در مورد Heap Allocation و ... بکنی. این جا رو ببین.
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
نقل قول:
نوشته شده توسط
IamOverlord
نه ما دستورات Assembly رو بدون هیچ پردازشی (یا با حداقل پردازش ممکن!) می دیم به Assembler مشکلی نداره...:متفکر: ضمنا دستورات Assembly تجزیه و تحلیل پیچیده ای برای Compiler ندارن...
ببین , وقتی داری به هر ایده فکر میکنی باید به فکر پیاده سازی هم باشی. یکی از کارای مهم کامپایلر تشخیص خطاهای لغوی و نحویه. ok ؟ خوب به نظر تو وقتی تحلیلگر ما به ساختار نحوی یک دستور اسمبلی برخورد کرد باید چه رفتاری داشته باشه.از کجا بفهمه این یه یه دستور اشتباه نیست و دستور اسمبلی هست ؟ خوب یه راه حل اینه که دستورات اسمبلی رو داخل یه جور بلاک خاص قرار بدیم (مثل کامپایلرهای دیگه) و وقتی که تحلیلگر به این بلاک برخورد کرد اونو مستقیمآ به اسمبلر بفرسته!). اما باز به نظر من این کار منطقی نیست چون فرض کن اگه دستور اسمبلی اشتباه باشه دیگه ما تونایی تشخیص نوع و محل خطا رو نداریم.
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
خوب Assembler و Linker در مرحله ی بعد خطا ها رو گزارش می کنن...
ضمنا Instuction های Assembly ساختار ساده ای دارن، یا عملوند ندارن، یا یه دونه دارن یا دو تا، بدون هیچ ساختار پیچیده یا عجیب و غریب خاصی...
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
نقل قول:
نوشته شده توسط
IamOverlord
خوب Assembler و Linker در مرحله ی بعد خطا ها رو گزارش می کنن...
ضمنا Instuction های Assembly ساختار ساده ای دارن، یا عملوند ندارن، یا یه دونه دارن یا دو تا، بدون هیچ ساختار پیچیده یا عجیب و غریب خاصی...
در مورد اولی که گفتی, مجبوریم که اسمبلر رو با کامپایلر یکپارچه کنیم. و در کدش هم دست ببریم.که دردسرهای خاص خودش رو داره.
در مورد دومی هم فقط مساله ساختار نحوی نیست بلکه باید دستورات زبان و انواع ثبات رو بررسی کنه. شاید به نظر اینا ساده بیاد ولی وقتی دارم تصور میکنم که تحلیلگرهایی که براشون کد مینویسم باید از اسمبلی هم حمایت کنند, کارو خیلی سخت میبینم. منطقی باش ما تجربه بورلند رو نداریم!
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
باشه،
اگه می خوای اینو می ذاریم واسه بعد...
برای برنامه های Windows کاربر حتما باید بتونه API تعریف کنه یا بالاخره ما باید براش تعریف کنیم...
چی کار کنیم؟ روش تعریف چی باشه؟
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
نقل قول:
نوشته شده توسط
IamOverlord
باشه،
اگه می خوای اینو می ذاریم واسه بعد...
برای برنامه های Windows کاربر حتما باید بتونه API تعریف کنه یا بالاخره ما باید براش تعریف کنیم...
چی کار کنیم؟ روش تعریف چی باشه؟
من الان حضور ذهن ندارم. میشه بگی مثلا چه توابعی در برنامه نویسی کنسول میتونه مورد استفاده باشه. خوب توابع مربوط به گرافیک و کنترل ها که اصلا کاربردی نداره. خوب دیگه چی میتونه مورد استفاده برنامه نویس باشه.(از بس دیگه با ویندوز کار نکردم توابعش یادم رفت:قهقهه:)
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
اونایی که تو پست 75 گذاشتم.
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
خوب یه چیزایی یادم اومد
مثلا توابع مربوط به اطلاعات دیسک که راه دیگه ای به غیر از استفاده از Api نیست. با این حساب باید کاربر بتونه از api استفاده کنه.
پس باید یه ساختار براش پیدا کنیم.
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
این روش رو ببین قبول داری:
Import Function “DeleteDC” From “GDI32.DLL” As DelDC (ByVal hdc : Long) : Long