التعامل مع وحدات الماكرو تعريف # في ياك / يكس البيسون

StackOverflow https://stackoverflow.com/questions/1615000

سؤال

وكيف لي أن تنفيذ وحدات الماكرو #define مع ياك / البيسون؟

وكنت أفكر فقط تحديد الأحرف يجب أن يتطابق متغير منتظم. يتم تعريف المتغيرات كما [a-zA-Z_][a-zA-Z0-9_]* ذلك الرقم الأول يمكن وضع الاختيار هناك لمعرفة ما إذا كان المتغير هو define'd عملت أم لا. ثم استبدال النص مع ما ينبغي أن يكون.

وكيف يمكنني أن أفعل ذلك؟ والآن أريد أن تجاهل تماما كلمة BAD كما لو كنت تعرف أنها #define BAD في C. وفيما يلي رمز لتلك القاعدة يكس لكن أنا أفعل ذلك الخطأ. أيضا يكس يشكو "BA" يجري في تيار. وأنا أعلم أن أدناه هو خاطئ تماما وغير منطقي فكيف يمكنني تجاهل سيئة ثم كيف يمكنني استبداله بشيء مثل تعويم

    if(strcmp(yytext, "BAD")==0) {
        int i, l = strlen(yytext);
        for(i=0; i<l; i++) { REJECT }
        return;
    }
    return VAR; }

وأنا أعلم أن الخطوات الرئيسية هي 1) تحديد تعريف، 2) الكشف عن ذلك في مصدر 3) جعل يكس ينسى الأحرف الكلي 4) إدراج الأحرف الصحيحة جديدة.

هل كانت مفيدة؟

المحلول

ووضع قاعدة في يكس للعثور على تحديد. ثم استخدام مدخلات لإدراج النص البديل. ملاحظة النص هو لإدراجها إلى الوراء

[a-zA-Z0-9_]* {
        if(strcmp(yytext, "HARDCODED_DEFINE")==0) {
            const char s[]="int replacement_text";
            int z;
            for(z=strlen(s)-1; z>=0; z--)
                unput(s[z]);
        }
        else
            return VAR_TOK; 
        }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top