יום שלישי, אוגוסט 09, 2011

struct to arff defenition

בפרוייקט המתזמן נתקעתי עם בעייה מציקה - בכל פעם ששיניתי מעט  מבנה הנתונים שלי (  struct) הייתי צריך לוודא שאני משתמש בטיפוסים המתאימים ובמקומות המתאימים בכל אחר.
 
אחת הבעיות היא הצורך ביצוא ל arff קצת sed וקצת ביטויים רגולרים ומתקבל החלק הבא :

grep ';' $(dirname $0)/$HEADER \
      | grep -vvv typedef \
      | grep -vvv extern \
      | grep -vvv '}' \
      | sed -e "s/^$//g" \
            -e "s/\/\/.*$//g" \
            -e "s/;.*//g" \
            -e"s/\[.*\]//g" \
            -e "s/ \+\(unsigned\)\? \+\(long\|short\|int\|pid_t\|cputime_t\) \+/numeric /g" \
            -e"s/ \+char \+/string /g" \
            -e "s/\([a-z]*\) \([a-zA-Z0-9_]*\)/\2 \1/" \
            -e "s/.*/@ATTRIBUTE &/g"

הביטוי יזהה את המשתנים המוגדרים בקובץ לו עושים את הבדיקה.
אותי עניינו הטיפוסים : 
long ,short , int , pid_t , cputime_t בלבד אבל ניתן להרחיב לכל טיפוס אחר.

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

נקודה חשובה שיש לזכור כאשר מבצעים את הdump הוא שמידע שהוא מחרוזת חייב להיות עטוף בגרש בודד 'text' ושצריך לבצע החלפת גרש במידה והמחרוזת מכילה מידע זה.

3 תגובות:

  1. האמת ייתכן רק שאינני יודע איך להוציא את המידע מהאינדוקס של ctags (או לשם העניין כל מנגנון tagים).

    או שכוונתך בכיוון אחר ?

    השבמחק
  2. תסתכל כאן לדוגמה: http://pastebin.com/1RhLW9We

    זה די פשוט לקריאה עם ביטויים רגולאריים...

    השבמחק