سؤال

أنا أعمل على تنفيذ برنامج التحويل البرمجي وأرغب في التحقق مما إذا كان قد تم الوصول إلى نهاية الملف؟

أعلم أنه يمكن القيام بذلك باستخدام وظيفة yywrap() في ملف lex، ولكن الشرط هو أننا نريد إذا تم تعريف EOF بشكل صريح كما هو الحال في القيمة السداسية 0x1a، فكيف يمكننا الإشارة إلى ذلك.

مثال:

الرئيسية() { printf ("تحقق من علامة EOF \ n") ؛'0x1a' <-- علامة EOF الفعلية.

أريد ألا يكون ما ورد أعلاه خطأ في بناء الجملة ، ولكن يجب الإبلاغ عنه كخطأ أقواس غير متوازنة ، أو تم تعريفها بشكل خاطئ.

هل يمكن القيام بما سبق؟متطلباتي هي فقط الحصول على رمز EOF في المحلل اللغوي، والذي لسوء الحظ، لم أتمكن من القيام بذلك حتى الآن :-((، سيتم إنجاز بقية العمل بسهولة كما هو الحال في ذلك الوقت، كل ما علي فعله هو إعطاء قاعدة مثل:

print    :    print_stmt '(' stmt_valid ')' colon '\n' 
{
    OK do the rest
}
         |    print_stmt '(' stmt_valid ')' colon end_indicator
{
    print error message and close application.
}
هل كانت مفيدة؟

المحلول

اجعل المعجم الخاص بك يعيد رمزًا مميزًا لـ EOF.

أقترح عليك إعادة الرمز المميز في حالتين:

  1. getc() عاد -1 (علامة EOF المعتادة).في هذه الحالة، اجعل نص الرمز المميز فارغًا

  2. getc() عاد '\x1a'.في هذه الحالة، ضع هذا الحرف في النص المميز.

هذا يسمح لقواعدك بالتمييز بين هاتين الحالتين.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top