صفحه 2 از 9 اولاول 1234 ... آخرآخر
نمایش نتایج 41 تا 80 از 329

نام تاپیک: ساخت Compiler و یک زبان برنامه نویسی جدید

  1. #41
    کاربر دائمی آواتار amin32
    تاریخ عضویت
    شهریور 1389
    محل زندگی
    !SolarSystem>Earth>Persia>North
    پست
    304

    نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید

    ایده های من

    دستورات با \ یا - از هم جدا بشن.

    جایگزینی و انتساب:
    a:b

    ولی برای تست تساوی در دستورات شرطی از = استفاده بشه.

    +
    -
    *
    /

    اما برای توان و باقیمانده از یک کلمه کلیدی استفاده بشه.

    یک تابع main داشته باشیم

    از < و > برای بلاک بندی توابع استفاده کنیم.

    فعلآ همین. اگه نظری داری بگو.

  2. #42
    کاربر دائمی
    تاریخ عضویت
    مرداد 1387
    محل زندگی
    35°41′46″N 51°25′23″E
    سن
    28
    پست
    1,545

    نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید

    خوب با main موافقم، چون می شه از طریق خط فرمان به برنامه آرگومان ارسال کرد.
    2 تا چیز در زبان C هست که گاهی اذیت می کنند: ; {}
    راحت تره که برای پایان دستوارت از ; استفاده نکنیم. اما اگه خواستیم چند تا دستور رو تو یه خط بنویسیم ; بذاریم. چون مفهوم مرتبطی داره. وقتی یه جمله ای می نویسیم که با جمله ی بعدی مرتبطه از ; استفاده می کنیم، در برنامه نویسی هم خطوط برنامه با هم مرتبط هستند پس فکر کنم بهتر باشه از ; استفاده کنیم برای نوشتن چند خط کد در یک خط.

    برای تست تساوی موافقم از = استفاده کنیم نه مثلا ==.
    چون اول ها که برنامه نویسی یاد گرفته بودم، 2 معنی متفاوت = در شرط ها و انتساب ها برام نا آشنا بود.

    یه ویرایش کوچولو می کنم ببینم موافقی:
    =: برای تساوی (گذاشتن ':' از لحاظ مفهومی واقعا مناسبه)

    به جای mod (مثل BASIC)، % (مثل C) بذاریم بهتر نیست؟
    برای توان چی؟
    از ^ که در BASIC هست استفاده کنیم
    یا تابع بسازیم : ()pow
    یا ... ؟

    < و > برای بلاک بندی توابع ریاضی یا اجرایی؟
    آخرین ویرایش به وسیله IamOverlord : پنج شنبه 29 دی 1390 در 12:26 عصر

  3. #43
    کاربر دائمی آواتار amin32
    تاریخ عضویت
    شهریور 1389
    محل زندگی
    !SolarSystem>Earth>Persia>North
    پست
    304

    نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید

    جدا کردن دستورات بر اساس خط به خط و بدون علامت هماهنگ کننده ( ; یا \ یا هر چیزی ) رو میشه تا حدودی حل کرد. ولی به هر حال نمیشه از بلاک بندی گذشت. چون اکثر زبانهای معروف
    حتی ویژوال بیسیک هم به نحوی این کار رو انجام میدن (sub .... end sub). ایدت در مورد استفاده از علامت ; فقط برای جدا کردن دستورات در یک خط هم جالبه اما بهتره از یه علامت دیگه
    استفاده کنیم که شبیه زبانهای دیگه نشه. مثل \ یا |

  4. #44
    کاربر دائمی آواتار amin32
    تاریخ عضویت
    شهریور 1389
    محل زندگی
    !SolarSystem>Earth>Persia>North
    پست
    304

    نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید

    البته منظورم از بلاک بندی , بلاک بندی تمام توابع هست (مثل {} در C)
    برای توان هم بهتره تابع بسازیم و از تابع به عنوان کلمه کلیدی استفاده کنیم.

    نقل قول نوشته شده توسط IamOverlord مشاهده تاپیک
    یه ویرایش کوچولو می کنم ببینم موافقی:
    =: برای تساوی (گذاشتن ':' از لحاظ مفهومی واقعا مناسبه)
    متوجه نشدم بالاخره برای انتساب از ':' استفاده کنیم یا از =:
    آخرین ویرایش به وسیله amin32 : پنج شنبه 29 دی 1390 در 13:08 عصر

  5. #45
    کاربر دائمی
    تاریخ عضویت
    مرداد 1387
    محل زندگی
    35°41′46″N 51°25′23″E
    سن
    28
    پست
    1,545

    نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید

    از =: استفاده کنیم. چون : مفهموم توضیح در مورد یه چیزی رو می ده (یه ایده در این مورد همین الان به ذهنم رسید)، و = مشخص می کنه که توضیح ما در مورد برابر شدن هست.
    این ساختار رو نگاه کن:

    a := b    'yani a = b
    a :- b 'yani a = a - b
    a :+ b 'yani a = a + b
    a :* b 'yani a = a * b
    a :/ b 'yani a = a / b
    ' ...
    ' shabihe += va -= ...


    از : خالی می تونیم برای تعریف متغیر و ... استفاده کنیم.

    نگران تشابه با زبان های دیگه هم نباش، این قدر ایده هست که اصلا طرف یادش نمی آد این شبیه کدوم زبانه!

    با Block ها مخالف نیستم، دوست دارم برای راحتی در یک خط بلاک رو شروع به تعریف کنه و در یک خط پایان بده تعریفو. شبیه BASIC.

  6. #46
    کاربر دائمی آواتار amin32
    تاریخ عضویت
    شهریور 1389
    محل زندگی
    !SolarSystem>Earth>Persia>North
    پست
    304

    نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید

    این چطوره؟


    <main:
    a:=c+j
    k:=f-t
    >

    <sampleFunction:
    m:=6+4
    >
    آخرین ویرایش به وسیله amin32 : جمعه 30 دی 1390 در 16:56 عصر

  7. #47
    کاربر دائمی
    تاریخ عضویت
    مرداد 1387
    محل زندگی
    35°41′46″N 51°25′23″E
    سن
    28
    پست
    1,545

    نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید

    سلام دوست عزیز، ببخشید یه مدت نتونستم بیام.
    در مورد sampleFunction اگه می شه یه توضیحی بدید. مثلا آرگومان های ارسالی، تعیین نوع خروجی، ... .
    قسمت main و Function شبیه هم نوشته می شن، خوبه یک پارچه تر می شه.
    اما تفاوت این دو و ویژگی هاشون چه طور مشخص می شه؟

  8. #48
    کاربر دائمی
    تاریخ عضویت
    مرداد 1387
    محل زندگی
    35°41′46″N 51°25′23″E
    سن
    28
    پست
    1,545

    Lightbulb نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید

    این Syntax رو ببین، ویرایش کن، دوباره بذار:
    فایل های ضمیمه فایل های ضمیمه

  9. #49
    کاربر دائمی آواتار amin32
    تاریخ عضویت
    شهریور 1389
    محل زندگی
    !SolarSystem>Earth>Persia>North
    پست
    304

    نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید

    نقل قول نوشته شده توسط IamOverlord مشاهده تاپیک
    این Syntax رو ببین، ویرایش کن، دوباره بذار:
    این ساختار خوب بود . اما فکر میکنم به دلیل اهمیت ساختار زبان بهتر باشه مرحله به مرحله پیش بریم. یعنی هر دفعه روی یک ساختار (تعریف توابع , حلقه , تعریف متغییر و ...) تمرکز کنیم و وقتی در مورد اون ساختار به توافق رسیدیم , به ساختار بعدی بپردازیم.

    به خاطر اهمیت ساختار توابع و مخصوصآ تابع اصلی برنامه بهتره با اون شروع کنیم.



    Function Multiply(x : Integer, y : Integer) : Integer
    Multiply = x * y
    End Function


    من با این ساختار تا حدودی موافقم ولی به نظرتون یکم شبیه پاسکال ( پارامترهای ورودی) و vb ( عبارت end function) نشده؟ اگه یکم تغییرش بدیم بهتر میشه.
    در ضمن برای تابع اصلی برنامه هم میتونیم از همین ساختار استفاده کنیم.

  10. #50
    کاربر دائمی
    تاریخ عضویت
    مرداد 1387
    محل زندگی
    35°41′46″N 51°25′23″E
    سن
    28
    پست
    1,545

    نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید

    بله ولی سعی کردم هم راحت نوشته بشه، هم راحت خونده بشه، و ...
    ضمنا می شه پیچیده تر و بهترش کرد؛ طی این مراحل خود به خود زبانمون بی شباهت به زبان خاضی می شه.
    اول در مورد تعریف متغیر بگید، اون : ها رو برای آرگومان های تابع واسه این گذاشتم که فرض کردم تعریف متغیر این طوری هست:
    i : Integer
    text1 : String
    v : Vector

  11. #51
    کاربر دائمی
    تاریخ عضویت
    مرداد 1387
    محل زندگی
    35°41′46″N 51°25′23″E
    سن
    28
    پست
    1,545

    نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید

    ببین 2 راه برای روال اصلی هست:
    1. نوشته نشه. یعنی به محض این که کد رو می نویسی در روال اصلی فرض می شه.
    2. نوشته بشه. که باید به صورت زیربرنامه در زبانمون تعریف بشه.

    مزیت روش 1 سادگی هست.
    مزیت روش 2 تمیزی کد و استفاده از آرگومان های ورودی به تابع اصلی در برنامه هست.

    البته برای استفاده از آرگومان های ورودی در روش 1، راه هست : بیایم یه دستور برای این کار در نظر بگیریم که در میان کد های روال اصلی، بیاد مقدار ورودی به روال رو از پشته دریافت کنه، یا هر نوع دستور دیگه ای...

    ----------------------------

    اگر روش 2 رو انتخاب کردیم:
    روال اصلی، SUB در نظر گرفته بشه یا FUNCTION یا اصلا مثل زبان C تعریف بشه یا ...؟

  12. #52
    کاربر دائمی آواتار amin32
    تاریخ عضویت
    شهریور 1389
    محل زندگی
    !SolarSystem>Earth>Persia>North
    پست
    304

    نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید

    نقل قول نوشته شده توسط IamOverlord مشاهده تاپیک
    اول در مورد تعریف متغیر بگید، اون : ها رو برای آرگومان های تابع واسه این گذاشتم که فرض کردم تعریف متغیر این طوری هست:
    i : Integer
    text1 : String
    v : Vector
    متوجه منظورتون شدم ولی میگم این نوع آرگومان دهی یکم شبیه پاسکال نشده. اگه به نظرتون این شباهت
    ایرادی نداره منم مشکلی ندارم.

  13. #53
    کاربر دائمی
    تاریخ عضویت
    مرداد 1387
    محل زندگی
    35°41′46″N 51°25′23″E
    سن
    28
    پست
    1,545

    نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید

    اگه اشکالی نداره با این ادامه بدیم، دوباره بر می گردیم عقب؟

  14. #54
    کاربر دائمی آواتار amin32
    تاریخ عضویت
    شهریور 1389
    محل زندگی
    !SolarSystem>Earth>Persia>North
    پست
    304

    نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید

    نقل قول نوشته شده توسط IamOverlord مشاهده تاپیک
    اگه اشکالی نداره با این ادامه بدیم، دوباره بر می گردیم عقب؟


    موافقم.

    پس ساختار توابع شد:


    Function Multiply(x : Integer, y : Integer) : Integer
    Multiply = x * y
    End Function


    و تابع اصلی :



    Function main() : Integer
    Multiply = x * y
    End Function


    حالا میرسیم به تعریف متغیرها.

  15. #55
    کاربر دائمی
    تاریخ عضویت
    مرداد 1387
    محل زندگی
    35°41′46″N 51°25′23″E
    سن
    28
    پست
    1,545

    نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید

    می گم موافقی انواع متغیر هامون و کنترل نوعمون رو یه مقدارشو از زبان Ada الهام بگیریم؟ یا حتی زبان های دیگه.
    زبان C که چیزی نداره!
    اما در BASIC یه چیزی هست : String که پیاده سازیشو نمی دونم فعلا. البته پیاده سازی Char و آرایه ای از اون رو مثل زبان C می دونم.

  16. #56
    کاربر دائمی
    تاریخ عضویت
    مرداد 1387
    محل زندگی
    35°41′46″N 51°25′23″E
    سن
    28
    پست
    1,545

    نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید

    مطالعه وبررسي زبانAda از 3 نقطه نظر:
    1- Data : داده هاي Ada شکل توسعه يافته اي از انواع پاسکال هستند اما قدرت تعريف نوع جديد درآنها بيشتر است .
    انواع داده هاي اوليه : شامل صحيح ، حقيقي، کاراکتري،بولي،رشتهايو اشاره گر
    انواع ساختمان داده : بردارها ، آرايه ها و فايلها
    انواع دادهاي کاربر ساز: رکورد ، زير نوع و ...


    2- عملیات پایه ای (Primitive Operation :/ * mod rem + - abs not & = /= ، > ، >= ، < ،<= in - not in- And -Or- Xor- And then- Or Else)

    3- Sequence Control: ترتيب انجام عمليات:

    - در داخل عبارات جبري:عمليات با تقدم از چپ به راست انجام ميشود . Ada دراي عمليات مدار کوتاه (And then,OR Else) است به طوري که اگر ارزيابي اولين عملوند براي تعيين مقدار عبارت کافي باشد فقط اولين عملوند را ارزيابي ميکند – استثنا پرانتز است
    - بين دستورات : ترتيب اجرا بدين ترتيب است که از آدرس پايين تر به آدرس بيشتر اجرا ميشود – استثنا ها – if case loop
    - بين برنامه اصلي و فرعي استثنائ اين مورد پردازش موازي است.

    www.atlasshabakeh.com/?m=articles&op=show&id=1315290760

  17. #57
    کاربر دائمی آواتار amin32
    تاریخ عضویت
    شهریور 1389
    محل زندگی
    !SolarSystem>Earth>Persia>North
    پست
    304

    نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید

    فعلا که با پیاده سازی کاری نداریم.فعلا می خوایم ساختار نحوی تعریف متغییر و نام انواع مختلف داده ای رو در زبانمون مشخص کنیم.

    bin: برای مقادیر باینری
    oct: برای مفادیر مبنای هشت
    dec: برای مقادیر دهدهی
    hex: مبنای شانزده
    integer: اعداد صحیح
    sinteger: اعداد صحیح کوچک
    binteger: اعداد صحیح خیلی بزرگ
    float: اعداد ممیز شناور
    bfloat: اعداد ممیز شناور بزرگ
    chr: برای نوع کاراکتری
    str: برای نوع رشته


    برای تعریف متغیر از ساختار زیر استفاده کنیم:

    variable i:integer

    که از کلمه کلیدی variable استفاده میکنه

    پیشنهاد من اینه که در اول برنامه یک قسمتی رو در نظر بگیریم که با یک کلمه کلیدی شروع بشه و در اون قسمت متغییرها و انواع جدید و انواع شمارشی و ...(البته اونهایی که قراره به شکل عمومی تعریف بشن) تعریف بشه. مثل:



    define:
    variable i:integer
    variable b:str
    end define


    نظرت چیه.

  18. #58
    کاربر دائمی
    تاریخ عضویت
    مرداد 1387
    محل زندگی
    35°41′46″N 51°25′23″E
    سن
    28
    پست
    1,545

    نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید

    عالی بود
    فقط یه پیشنهاد اساسی: برنامه نویس متغیر ها رو در هر جا از برنامه که خواست تعریف کنه (البته در جاهای مجاز!) >>> جنبه ی راحتی داره.
    حتی بعدا خودمون می تونیم متغیر های تعریف شده رو جمع آوری کنیم و بیاریم اول تعریف کنیم و ...

  19. #59
    کاربر دائمی آواتار amin32
    تاریخ عضویت
    شهریور 1389
    محل زندگی
    !SolarSystem>Earth>Persia>North
    پست
    304

    نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید

    نقل قول نوشته شده توسط IamOverlord مشاهده تاپیک
    عالی بود
    فقط یه پیشنهاد اساسی: برنامه نویس متغیر ها رو در هر جا از برنامه که خواست تعریف کنه (البته در جاهای مجاز!) >>> جنبه ی راحتی داره.
    اون که صد در صد . من منظورم متغییرهای سراسری بود.

    اما برای کتابخانه ها من یه نظر خوب دارم.هر کتابخانه با پسوند lib ذخیره بشه و به شکل زیر استفاده بشه:

    "use "math.lib

  20. #60
    کاربر دائمی
    تاریخ عضویت
    مرداد 1387
    محل زندگی
    35°41′46″N 51°25′23″E
    سن
    28
    پست
    1,545

    نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید

    یه پارامتر جدید می شه برای تعریف متغیر ها در نظر گرفت:
    Variable x : Integer(2)

    2 ای که داخل پرانتر هست تعداد بایت رو مشخص می کنه، و Integer هم که نوع ذخیره سازی در اون 2 بایت رو.
    این طوری زبان انعطاف پذیر تره.
    اما یه مسئله ای : آیا قابل پیاده سازی هست؟ مثلا 100 بایت متغیر (!) چه طوری می خواد تو 100 بایت دیگه ریخته بشه؟ در حالت عادی در زبان Assembly این کارو می کنیم:
    MOV AX,Variable1
    MOV Variable2,AX


    که می آد اول Variable1 رو می ریزه تو AX بعد Variable2. ضمنا در این جا چون AX یه ثبات 16 بیتی هست، Variable1 و Variable2 هم همین طور اند. حالا مسئله این جاست ما Register های 100 بایتی نداریم! پس فکر می کنم این ایده ی جدید کارش یه کم وحشتناک باشه، فعلا این ایده رو بذاریم برای بعد...!

  21. #61
    کاربر دائمی
    تاریخ عضویت
    مرداد 1387
    محل زندگی
    35°41′46″N 51°25′23″E
    سن
    28
    پست
    1,545

    نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید

    نقل قول نوشته شده توسط amin32 مشاهده تاپیک
    اون که صد در صد . من منظورم متغییرهای سراسری بود.

    اما برای کتابخانه ها من یه نظر خوب دارم.هر کتابخانه با پسوند lib ذخیره بشه و به شکل زیر استفاده بشه:

    "use "math.lib
    موافقم.
    ولی اگه خواستیم بعدا API تعریف کنیم، چی؟
    این 2 تا رو با هم بررسی کنیم؟
    چون این 2 تا خیلی به هم مربوط هستند.

  22. #62
    کاربر دائمی
    تاریخ عضویت
    مرداد 1387
    محل زندگی
    35°41′46″N 51°25′23″E
    سن
    28
    پست
    1,545

    نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید

    تعریف API باید ارتباط نزدیکی با تعریف توابع ها و زیربرنامه هامون داشته باشه.

  23. #63
    کاربر دائمی آواتار amin32
    تاریخ عضویت
    شهریور 1389
    محل زندگی
    !SolarSystem>Earth>Persia>North
    پست
    304

    نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید

    نقل قول نوشته شده توسط IamOverlord مشاهده تاپیک
    پس فکر می کنم این ایده ی جدید کارش یه کم وحشتناک باشه، فعلا این ایده رو بذاریم برای بعد...!
    موافقم.راستش وقتی هنوز آخر جملت رو نخونده بودم میخواستم برات بنویسم که یکم پیاده سازیش سخته. که دیگه خودت گفتی

  24. #64
    کاربر دائمی آواتار amin32
    تاریخ عضویت
    شهریور 1389
    محل زندگی
    !SolarSystem>Earth>Persia>North
    پست
    304

    نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید

    نمیدونم سرور این سایت فقط برای من اینقدر کند شده یا کلآ اینجوریه. اعصاب برام نذاشت.

  25. #65
    کاربر دائمی
    تاریخ عضویت
    مرداد 1387
    محل زندگی
    35°41′46″N 51°25′23″E
    سن
    28
    پست
    1,545

    نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید

    سلام دوست عزیز،
    ببخشید یه مدت نتونستم بیام.

    تو این مدت سورس کد Libry رو خوندم، فهمیدم طرف چه جوری نوشته.
    من هم به نظرم از توابعی که نوشته، استفاده کنیم.

    این رو دانلود کن:
    فایل های ضمیمه فایل های ضمیمه

  26. #66
    کاربر دائمی آواتار amin32
    تاریخ عضویت
    شهریور 1389
    محل زندگی
    !SolarSystem>Earth>Persia>North
    پست
    304

    نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید

    یه مقداری کدش زیاده و حس خوندنش نیست. در ضمن فکر میکنم این توابع بیشتر به درد الگو گرفتن در عقب بندی میخوره. و من میخوام تمام تمرکز روی جلوبندی و تحلیلگرها باشه.

  27. #67
    کاربر دائمی
    تاریخ عضویت
    مرداد 1387
    محل زندگی
    35°41′46″N 51°25′23″E
    سن
    28
    پست
    1,545

    نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید

    خوب در مورد Syntax آخرین تغییرات رو رو این بده:
    فایل های ضمیمه فایل های ضمیمه

  28. #68
    کاربر دائمی
    تاریخ عضویت
    مرداد 1387
    محل زندگی
    35°41′46″N 51°25′23″E
    سن
    28
    پست
    1,545

    نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید

    قلب کد اون Libry Compiler، یه روال هست به نام CodeBlock که نکته ی جالبی که در کدش دیدم این بود که اول آخرین فاز کامپایلر رو فراخوانی می کرد، بعد آخرین فاز یه گذری به فاز های قبلی می زد و فاز های قبلی هم همین طور، نه این که بیاد از فاز اول تا آخر رو جدا و پشت سر هم اجرا کنه.

  29. #69
    کاربر دائمی آواتار amin32
    تاریخ عضویت
    شهریور 1389
    محل زندگی
    !SolarSystem>Earth>Persia>North
    پست
    304

    نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید

    دوست عزیز , آسیاب به نوبت.آخه ساختار نحوی یه زبان جدید چیزی نیست که بشه تمامش رو یکجا مشخص کرد. من فکر میکنم همون روند که داشتیم طی میکردیم خوب بود.
    یعنی تک تک , ساختارها رو مشخص کنیم و در آخر هم جمعبندی کنیم.

    نقل قول نوشته شده توسط IamOverlord مشاهده تاپیک
    قلب کد اون Libry Compiler، یه روال هست به نام CodeBlock که نکته ی جالبی که در کدش دیدم این بود که اول آخرین فاز کامپایلر رو فراخوانی می کرد، بعد آخرین فاز یه گذری به فاز های قبلی می زد و فاز های قبلی هم همین طور، نه این که بیاد از فاز اول تا آخر رو جدا و پشت سر هم اجرا کنه.
    اما در این مورد باید عرض کنم که تمام کامپایلرها به نوعی به این شکل عمل میکنند. یعنی مثلا تحلیلگر نحوی که در مرحله دوم قرار داره زودتر اجرا میشه و تحلیلگر لغوی که در مرحله اول قرار داره رو فراخوانی کرده و ازش درخواست لغت جدید میکنه. این طبیعیه و ربطی به ترتیب و جداسازی مراحل نداره.

    من ساختارهایی که روش تا اینجا اتفاق نظر داشتیم رو جمع آوری میکنم و قرار میدم تا ساختارهای دیگه رو هم به ترتیب بهش اضافه کنیم.

  30. #70
    کاربر دائمی
    تاریخ عضویت
    مرداد 1387
    محل زندگی
    35°41′46″N 51°25′23″E
    سن
    28
    پست
    1,545

    نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید

    اما در این مورد باید عرض کنم که تمام کامپایلرها به نوعی به این شکل عمل میکنند. یعنی مثلا تحلیلگر نحوی که در مرحله دوم قرار داره زودتر اجرا میشه و تحلیلگر لغوی که در مرحله اول قرار داره رو فراخوانی کرده و ازش درخواست لغت جدید میکنه. این طبیعیه و ربطی به ترتیب و جداسازی مراحل نداره.
    خوب راستش من اینو تازه فهمیدم! تصوری در این رابطه نداشتم...

    دوست عزیز , آسیاب به نوبت.آخه ساختار نحوی یه زبان جدید چیزی نیست که بشه تمامش رو یکجا مشخص کرد. من فکر میکنم همون روند که داشتیم طی میکردیم خوب بود.
    یعنی تک تک , ساختارها رو مشخص کنیم و در آخر هم جمعبندی کنیم.
    عیب نداره می تونیم همون روند رو طی کنیم... الان در مورد اعلان متغیر ها و این جور مسائل باید صحبت کنیم دیگه؟

  31. #71
    کاربر دائمی آواتار amin32
    تاریخ عضویت
    شهریور 1389
    محل زندگی
    !SolarSystem>Earth>Persia>North
    پست
    304

    نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید

    اینم از ساختارهایی که قبلا در موردش بحث شد و تقریبآ به یک توافقی رسیدیم. البته اگه ایرادی میبینید
    لطفآ بیان کنید.


    Algorium.rtf.zip

    با توجه به این که برنامه های کامپایل شده مبتنی بر کنسول هستند, فکر میکنم اولویت با دستورات ورودی خروجی زبان
    یعنی ساختار دستوری خواندن و نوشتن از کنسول باشه.پس بهتره اول اونو مشخص کنیم.

  32. #72
    کاربر دائمی
    تاریخ عضویت
    مرداد 1387
    محل زندگی
    35°41′46″N 51°25′23″E
    سن
    28
    پست
    1,545

    نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید

    خوب به نظرم بهتره دستورات ورودی و خروجی Console جزو دستورات پیش فرض زبان نباشند. یعنی درون ساخت نباشند. بلکه در کتاب خانه ای تعریف شوند از دستورات پایه ای تر.
    دستورات پایه ای تر همون دستورات Assembly باشند، یعنی طرف به صورت Inline کد Assembly بنویسه.
    پس به نظرم قبلش در این مورد صحبت کنیم که چه طور کد های Assembly اش رو بنویسه.

  33. #73
    کاربر دائمی
    تاریخ عضویت
    مرداد 1387
    محل زندگی
    35°41′46″N 51°25′23″E
    سن
    28
    پست
    1,545

    نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید

    دستت درد نکنه دوست عزیز، تقریبا موافقم:

    define:
    variable a:bin
    variable b:oct
    variable c:dec
    variable d:hex
    variable e:integer
    variable f:sinteger
    variable g:binteger
    variable h:float
    variable i:bfloat
    variable j:char
    variable k:str
    end define


    1. به نظرم بهتر باشه متغیر ها هر جا که طرف خواست به طور پراکنده تعریف بشن. موافقی؟
    2. در مورد مختصر نویسی :
    مثل پاسکال از var استفاده بشه به جای variable، یا این که اگر هم مختصر نویسی نمی کنیم نوع متغیر ها رو هم مختصر نویسی نکنیم. مثلا این طوری:

    	variable a : binary
    variable b : octal
    variable c : decimal
    variable d : hexadecimal
    variable e : integer
    variable f : sinteger
    variable g : binteger
    variable h : float
    variable i : bfloat
    variable j : character
    variable k : string


    3. ضمنا روش ذخیره سازی اعداد hexadecimal، decimal یا ... که با هم فرقی نداره. پس بهت نیست اینا همشون یه نوع باشن، اما کاربر موقع مقدار دهی متغیر ها به شکل دلخواه مقدار دهی کنه؟ ضمنا برای نمایششون هم در مبناهای مختلف می شه توابع و زیربرنامه هایی در نظر گرفت.
    یعنی مثلا طرف بنویسه :

    variable e : integer


    و موقع مقداردهی بتونه از هر کدوم اینا که دلش خواست استفاده کنه:

    i = 344
    i = 123456789ABCDEFh
    i = 0x11011001


    یا حالا هر جور دیگه ای که به نظرت می آد...

  34. #74
    کاربر دائمی آواتار amin32
    تاریخ عضویت
    شهریور 1389
    محل زندگی
    !SolarSystem>Earth>Persia>North
    پست
    304

    نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید

    با استفاده از دستورات اسمبلی موافقم. ولی در نهایت که باید یک دستور ساده برای ورودی خروجی داشته باشیم.چه به شکل مستقیم یا به شکل کتابخانه ای.

    پیشنهاد من برای دستورات inline :


    instraction:
    mov ax,bx
    sti
    mov ss,ax
    end instruction

  35. #75
    کاربر دائمی
    تاریخ عضویت
    مرداد 1387
    محل زندگی
    35°41′46″N 51°25′23″E
    سن
    28
    پست
    1,545

    نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید

    برای کار با Console فکر می کنم این توابع API کافی باشه:

    Private Declare Function AllocConsole Lib "kernel32" () As Long
    Private Declare Function FreeConsole Lib "kernel32" () As Long
    Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
    Private Declare Function GetStdHandle Lib "kernel32" (ByVal nStdHandle As Long) As Long
    Private Declare Function WriteConsole Lib "kernel32" Alias "WriteConsoleA" (ByVal hConsoleOutput As Long, lpBuffer As Any, ByVal nNumberOfCharsToWrite As Long, lpNumberOfCharsWritten As Long, lpReserved As Any) As Long
    Private Declare Function ReadConsole Lib "kernel32" Alias "ReadConsoleA" (ByVal hConsoleInput As Long, ByVal lpBuffer As String, ByVal nNumberOfCharsToRead As Long, lpNumberOfCharsRead As Long, lpReserved As Any) As Long
    Private Declare Function SetConsoleTextAttribute Lib "kernel32" (ByVal hConsoleOutput As Long, ByVal wAttributes As Long) As Long
    Private Declare Function SetConsoleTitle Lib "kernel32" Alias "SetConsoleTitleA" (ByVal lpConsoleTitle As String) As Long
    Private Declare Function GetConsoleTitle Lib "kernel32" Alias "GetConsoleTitleA" (ByVal lpConsoleTitle As String, ByVal nSize As Long) As Long
    Private Declare Function GetConsoleWindow Lib "kernel32" () As Long
    Private Declare Function GetConsoleCursorInfo Lib "kernel32" (ByVal hConsoleOutput As Long, lpConsoleCursorInfo As CONSOLE_CURSOR_INFO) As Long
    Private Declare Function SetConsoleCursorInfo Lib "kernel32" (ByVal hConsoleOutput As Long, lpConsoleCursorInfo As CONSOLE_CURSOR_INFO) As Long
    Private Declare Function GetConsoleMode Lib "kernel32" (ByVal hConsoleHandle As Long, lpMode As Long) As Long
    Private Declare Function SetConsoleMode Lib "kernel32" (ByVal hConsoleHandle As Long, ByVal dwMode As Long) As Long
    Private Declare Function WriteConsoleOutputCharacter Lib "kernel32" Alias "WriteConsoleOutputCharacterA" (ByVal hConsoleOutput As Long, ByVal lpCharacter As String, ByVal nLength As Long, ByVal dwWriteCoord As Long, lpNumberOfCharsWritten As Long) As Long
    Private Declare Function GetConsoleScreenBufferInfo Lib "kernel32" (ByVal hConsoleOutput As Long, lpConsoleScreenBufferInfo As CONSOLE_SCREEN_BUFFER_INFO) As Long
    Private Declare Function SetConsoleCursorPosition Lib "kernel32" (ByVal hConsoleOutput As Long, ByVal dwCursorPosition As Long) As Long
    Private Declare Function FillConsoleOutputCharacter Lib "kernel32" Alias "FillConsoleOutputCharacterA" (ByVal hConsoleOutput As Long, ByVal cCharacter As Byte, ByVal nLength As Long, dwWriteCoord As Long, lpNumberOfCharsWritten As Long) As Long
    Private Declare Function SetConsoleCtrlHandler Lib "kernel32" (ByVal HandlerRoutine As Long, ByVal Add As Long) As Long
    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDest As Any, pSrc As Any, ByVal ByteLen As Long)
    Private Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (lpVersionInformation As OSVERSIONINFO) As Long


    نمونه ی کارشون اینه:
    فایل های ضمیمه فایل های ضمیمه

  36. #76
    کاربر دائمی
    تاریخ عضویت
    مرداد 1387
    محل زندگی
    35°41′46″N 51°25′23″E
    سن
    28
    پست
    1,545

    نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید

    نقل قول نوشته شده توسط amin32 مشاهده تاپیک
    با استفاده از دستورات اسمبلی موافقم. ولی در نهایت که باید یک دستور ساده برای ورودی خروجی داشته باشیم.چه به شکل مستقیم یا به شکل کتابخانه ای.

    پیشنهاد من برای دستورات inline :


    instraction:
    mov ax,bx
    sti
    mov ss,ax
    end instruction
    یه فکری می گم بیایم شبیه Pure BASIC دستورات Assembly رو بدون تعریف Block و سه سوته قابل استفاده کنیم؟ یعنی کاملا مستقیم و بدون استفاده از Instruction.

    در مورد دستورات ورودی و خروجی هم 2 حالت داره:
    1. می تونه توابع API که گفتم رو تعریف کنه و یا از کتابخانه هایی که این توابع توشون تعریف شده استفاده کنه.
    2. اگه توانایی استفاده از Interrupt ها رو توسط دستورات Assembly داره، می تونه این کارو بکنه یا از کتاب خانه هایی که از قبل از این دستورات در زیربرنامه ها و توابعشون استفاده کردن، استفاده کنه.

  37. #77
    کاربر دائمی آواتار amin32
    تاریخ عضویت
    شهریور 1389
    محل زندگی
    !SolarSystem>Earth>Persia>North
    پست
    304

    نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید

    نقل قول نوشته شده توسط IamOverlord مشاهده تاپیک
    1. به نظرم بهتر باشه متغیر ها هر جا که طرف خواست به طور پراکنده تعریف بشن. موافقی؟
    قبلا گفتم که کاربر میتونه در هر تابعی متغیر تعریف کنه و این ساختار define که در ابتدای برنامه هست فقط برای تعریف متغیرها و ساختارهایی هست که به شکل سراسری به کار برده میشن.

    نقل قول نوشته شده توسط IamOverlord مشاهده تاپیک
    2. در مورد مختصر نویسی :
    مثل پاسکال از var استفاده بشه به جای variable، یا این که اگر هم مختصر نویسی نمی کنیم نوع متغیر ها رو هم مختصر نویسی نکنیم.
    خودم هم var رو بهتر میدونم ولی همونطور که گفتید خیلی شبیه پاسکال میشد. درمورد کامل نوشتن انواع هم ربطی نمی بینم و فقط اوضاع رو بدتر میکنه.
    به غیر از var و variable کلمه دیگه ای به ذهنتون نمیرسه که هم کوتاه باشه هم مناسب؟

    درباره مورد سوم هم باید بگم که میتونیم فعلا از این انواع صرف نظر کنیم و اونا رو یک نوع در نظر بگیریم تا شاید بعدآ بهشون فکر کنیم.

  38. #78
    کاربر دائمی
    تاریخ عضویت
    مرداد 1387
    محل زندگی
    35°41′46″N 51°25′23″E
    سن
    28
    پست
    1,545

    نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید

    مثلا فرض کن توانایی استفاده از توابع API رو داره؛ می تونه یه Library تعریف کنه و مثلا اینا رو توش بنویسه:

    Import Function "WriteConsoleA" From "KERNEL32.DLL" As WriteConsole (ByVal hConsoleOutput : Long, lpBuffer : Any, ByVal nNumberOfCharsToWrite : Long, lpNumberOfCharsWritten : Long, lpReserved : Any) : Boolean

    Function WriteString(sWhat : String) : Long
    WriteConsole hConsoleOut, ...
    End Function

  39. #79
    کاربر دائمی
    تاریخ عضویت
    مرداد 1387
    محل زندگی
    35°41′46″N 51°25′23″E
    سن
    28
    پست
    1,545

    نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید

    شاید بخواد یه سری از متغیر ها Global تعریف بشن و از بیرون هم قابل دسترسی باشن، یا یه سری Private تعریف بشن و فقط از داخل (نه داخل یه روال خاص، داخل همه ی روال ها) قابل فراخوانی باشن. نظر شما چیه که این کارو کنیم:
    Public MainProgramTitle : String = "First Project"
    Private WebsiteAddress : String = "www.barnamenevis.org"

    Function Main() : Integer

    End Function


    این ساختار تعاریف رو بررسی کنید:
    ' Variable Declaration:
    MainProgramTitle : String = "First Project"
    Private WebsiteAddress : String = "www.barnamenevis.org"
    ' Object Declaration:
    Object Apple : Fruit
    Public Object Orange : Fruit
    ' Win API Declaration
    Import Function “DeleteDC” From “GDI32.DLL” As DelDC (ByVal hdc : Long) : Long


    هم کوتاهه هم همه چیو می تونه مشخص کنه.

  40. #80
    کاربر دائمی آواتار amin32
    تاریخ عضویت
    شهریور 1389
    محل زندگی
    !SolarSystem>Earth>Persia>North
    پست
    304

    نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید

    راستش یه خورده از حرفات در مورد api گیج شدم ولی فقط اینو بگم که اگه منظورت متکی بودن به api ویندوزه باید بگم اصلا کار منطقی ای نیست.
    ببین مثلا زبان سی رو در نظر بگیر. به نظر من یکی از کاملترین کامپایلرهای این زبان gcc هست که اصولا برای لینوکس توسعه داده شده.
    یکی از راههای متداول کار با ورودی خروجی به این شکل هست که ما اول میایم یه فایل سرایند <stdio.h> رو در برنامه معرفی میکنیم و
    در برنامه میتونیم از دستورات printf و scanf برای ورودی خروجی استفاده کنیم . نظر من اینه که استفاده کلی از چنین ساختاری منطقی تر به نظر میرسه.

صفحه 2 از 9 اولاول 1234 ... آخرآخر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •