עבור לתוכן

interpeter ל brainf***, ול Befunge

Featured Replies

פורסם

אני כותב interpreter ל ***brainf ב C++ ואני רוצה להיות בטוח שכשאני מוסיף 1 למשתנה מסוג unsigned char שמכיל 255 ערכו יהיה 0, ולהיפך.

האם זה תמיד יהיה ככה או שצריך להגיד משהו עם define או הגדרות קומפיילר כלשהן כדי לוודא שזה יקרה?

או שאין בכלל דרך לוודא שזה יהיה ככה על כל מכונה וצריך לכתוב קוד עבור מקרי הקצה?

פורסם

אם תשתמש ב-unsigned char לא תהיה שום בעיה. לחילופין, תשתמש ב-int ותמיד תעשה & עם 0xff.

פורסם
  • מחבר

תודה, סיימתי את ה interpreter, הוא לא הכי מהיר, אבל לפי מה שבדקתי הוא עובד כמו שצריך :).

צירפתי את הקוד ואת הקובץ המקומפל למי שמעוניין.

[attachment deleted by admin]

פורסם

>+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++.[-]
>++++++++[<++++>-] <.>+++++++++++[<++++++++>-]<-.--------.+++
.------.--------.[-]>++++++++[<++++>- ]<+.[-]++++++++++.

פורסם

Nice! ואם הקוד של Zelig עןשה מה שהוא צריך לעשות אז זה אכן עובד ;D

בכל מקרה כמה הערות בקשר לקוד:

אתה כותב ב C++ אז למה להתשמש בקריא של קבצים משפת C? ל C++ יש מנגון יפה של קריאה מקובץ. ולא משנה מה השפה (C/C++) יש דרך לקרוא את כל הקובץ לחוצץ במקום לקרוא תו תו, שים לב כמה פעמים אתה יוצר אובייקט של סטרינג כאשר אתה קורא את הקובץ תו-תו.

הימנע מלהשתמש ב DEFINE במיוחד בדרים כמו הגדרת טיפוסים חדשים, בשביל זה יש typedef.

זהו חוץ מזה כל הכבוד ^^ אהבתי את הרעיון

פורסם

בהחלט. גם לא עושים define לקבועים אלא משתמשים ב-const int.

פורסם

^^^^^

למה ?

פורסם

בעקרון define זה דבר בעייתי. כשאתה מגדיר משהו באמצעות define, אז מה שקורה הוא שpreprocessor לוקח את הערך שהגדרת ופשוט מדביק אותו בכל המקומות שבהם אתה משתמש בו. זה יכול לגרום לכל מיני בעיות אם אתה לא משתמש בו בצורה נכונה. לדוגמה:


const int NUMBER = -42;
int main()
{
int x = -NUMBER;
}

תחשוב מה יקרה עם תשתמש ב-define במקום ב-const int.

חוץ מזה, המילים השמורות typedef ו-const נועדו בדיוק למצבים האלה, אז למה לא להשתמש בהן?

נ.ב. חיפוש קצר בגוגל ייתן לך עוד כל מיני דוגמאות בהן עדיף להשתמש ב-typedef וב-const על פני define.

פורסם
  • מחבר

Nice! ואם הקוד של Zelig עןשה מה שהוא צריך לעשות אז זה אכן עובד ;D

עובד נהדר :xyxthumbs:

בכל מקרה כמה הערות בקשר לקוד:

אתה כותב ב C++ אז למה להתשמש בקריא של קבצים משפת C? ל C++ יש מנגון יפה של קריאה מקובץ. ולא משנה מה השפה (C/C++) יש דרך לקרוא את כל הקובץ לחוצץ במקום לקרוא תו תו, שים לב כמה פעמים אתה יוצר אובייקט של סטרינג כאשר אתה קורא את הקובץ תו-תו.

א) אני לא מכיר/זוכר את המנגנון של C++ :-\

ב) אני יודע שיש דרכים יותר טובות מלקרוא תו תו, הבעיה שהדרכים שאני מכיר מחזירות מחרוזות בסגנון c והשתמשתי פה בטיפוס string, והחלטתי ללכת על מה שאני יודע במקום להתעקב על הקטע הזה..

הימנע מלהשתמש ב DEFINE במיוחד בדרים כמו הגדרת טיפוסים חדשים, בשביל זה יש typedef.

צודק, התבלבלתי פה.

זהו חוץ מזה כל הכבוד ^^ אהבתי את הרעיון

תודה :).

  • 4 שבועות מאוחר יותר...
פורסם

ד.א. INT OVERFLOW מאט את התוכנית בהרבה. תנסה להימנע מINT OVERFLOW כמה שיותר.

פורסם

ד.א. INT OVERFLOW מאט את התוכנית בהרבה. תנסה להימנע מINT OVERFLOW כמה שיותר.

מה!? מאיפה הבאת את זה!? כל קומפיילר C שאני מכיר פשוט מתעלם מ-overflow, ואני לא מכיר אף פלטפורמה שמדליקה את ה-integer overflow exception (בהנחה שהוא בכלל קיים במעבד).

אולי אתה מתבלבל עם python 3 או משהו?

פורסם

זו בעיה שנתקלתי בה בC#.

לא ניסיתי את זה בPYTHON... זה גם לא רלוונטי כל כך לשפה הזו.

פורסם

ב.net יש בדיקות overflow אם אתה מציין את הקוד שלך כ checked (בדיפולט הוא unchecked)

לא ידוע לי שקיים משהו כזה בC כחלק מהתקן של השפה

פורסם

משום מה הייתי בטוח שהיה מדובר בC# בתראד הזה.

אני צריך בדיקת ראיה דחוף.

פורסם
  • מחבר

קיבלתי חשק לעשות מה שרציתי לעשות בזמנו - לכתוב גם קומפיילר ל BF.

אני מתאר לעצמי שלשפה פשוטה כמו BF זה לא צריך להיות יותר קשה מלכתוב את ה interpreter, אבל אני לא יודע ממש איך להתחיל :/.

ממה שקראתי קצת ברשת אני צריך להבין איך לממש את ה code generator (אין כמעט צורך לעשות ניתוח תחבירי וכו').

בשביל לעשות את זה אני צריך ידע ב assembler?

אשמח לקישור למאמר שיוכל לעזור אותי (הדבר הכי טוב שמצאתי זה זה: http://compilers.iecc.com/crenshaw/ , אבל זה קצת overkill בגלל שכותבים שם קומפיילר הרבה יותר מתוחכם).

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים