سؤال

ومشكلتي هي أنني أحاول أن تشغيل المشكلة أنني مشفرة باستخدام الماسح الضوئي محلل فليكس البيسون. ما يفترض برنامجي القيام به هو اتخاذ إدخال المستخدم (في حالتي، الاستعلامات للنظام قاعدة بيانات أنا تصميم)، يكس وتحليل، ومن ثم تنفيذ الإجراءات المقابلة. ما يحدث في الواقع هو أن قانون بلدي محلل لا تفسير لسلسلة حرفية أن أتغذى بشكل صحيح.

إليك قانون بلدي:

130 insertexpr :  "INSERT" expr '(' expr ')'
131 
132                  {
133                         $$ = new QLInsert( $2, $4 );
134                          }
135                         ;

ومدخلات بلدي، في أعقاب "الاستعلام:" موجه:

<اقتباس فقرة>   

والاستعلام: INSERT اي بي سي (5)؛
  المدخلات: 1،0-5: خطأ لغوي، سلسلة غير متوقعة، متوقعا نهاية الملف أو نهاية السطر أو INSERT أو '؛'

والآن، إذا كنت إزالة "INSERT" سلسلة حرفية من قانون بلدي parser.yy على خط 130، البرنامج يعمل على ما يرام. في الواقع، بعد تخزين البيانات المدخلة (أي، "اي بي سي" وعدد صحيح 5)، لقد عاد الظهير الايمن لي بشكل صحيح.

في البداية، اعتقدت هذا مشكلة مع المحارف. يحتاج كود البيسون التي سيتم تجميعها وتشغيلها باستخدام نفس ترميزات، التي لا ينبغي أن قضية كما نرى أنا تجميع وتشغيل من نفس المحطة.

وبياناتي النظام:

وأوبونتو 8.10 (لينكس 2.6.24-16-عام)
المرن 2.5.34
البيسون 2.3
دول مجلس التعاون الخليجي 4.2.4

إذا كنت بحاجة إلى أي مزيد من المعلومات أو رمز من، اسمحوا لي أن أعرف!

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

المحلول

وهذا هو الخطأ الكلاسيكية، إذا كنت تستخدم المرن ليكس الإدخال إلى الرموز، يجب أن لا أشير إلى السلاسل الحرفية في محلل كسلاسل الحرفي، وإنما استخدام الرموز بالنسبة لهم.

لمزيد من التفاصيل، انظر هذا سؤال مماثل

نصائح أخرى

وThankee، thankee، thankee!

وفقط لتوضيح، وهنا هو كيف تنفذ حل بي، استنادا إلى التعليقات من jpalecek. أولا، أعلنت رمز وINSERT في قانون البيسون (parser.yy):

71 %token INSERT

وبعد ذلك، يعرف أن رمز في القانون المرن (scanner.ll):

79 "INSERT INTO" { return token::INSERT; }

وأخيرا، لقد استخدمت INSERT رمزي في بلدي القاعدة النحوية:

132 insertexpr :  INSERT expr '(' expr ')'
133 
134                  {
135                         $$ = new QLInsert( $2, $4 );
136                          }
137                         ;

وفويلا! بلدي الصداع خلال موسعة قد انتهت!

شكرا، jpalecek:)

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