محلل Antlr معلق في Proxy.handshake Call
-
22-09-2019 - |
سؤال
أنا أحاول الحصول على محلل ECMASCRIPT الأساسي ، ووجدت قواعد ANTLR كاملة ل ecmascript 3, ، والذي يبدو أنه يجمع موافق وينتج ملفات Lexer/Parser/Walker Java المناسبة.
(الجري من الداخل antlr ide plugin ل Eclipse 3.5)
ومع ذلك ، عند محاولة استخدامه بالفعل مع بعض رمز الاختبار البسيط (التالي دليل على Antlr Wiki) ، إنه معلق فقط عند محاولة إنشاء المحلل:
CharStream MyChars = new ANTLRFileStream(FileName); // FileName is valid
ES3Lexer MyLexer = new ES3Lexer(MyChars);
CommonTokenStream MyTokens = new CommonTokenStream(MyLexer);
MyTokens.setTokenSource(MyLexer);
ES3Parser MyParser = new ES3Parser( MyTokens ); // hangs here
ES3Parser.program_return MyReturn = MyParser.program();
لقد تتبعت المشكلة إلى داخل ES3Parser
مُنشئ ، حيث يدعو الوظيفة proxy.handshake()
- قبل هذا الخط يمكنني القيام بنجاح System.out.println("text")
لكن بعد ذلك لا أحصل على شيء.
لذا ، كيف يمكنني معرفة سبب معلقها ، وإيقافها - أو حتى تجاوز هذا القسم (هل يمكنني/يجب أن أقوم بتعطيل التصحيح؟) - طالما يتيح ذلك العمل ويسمح لي بالاستمرار في القيام بأشياء مفيدة .
المحلول 2
لقد قمت بحل هذا عن طريق تعطيل توليد رمز التصحيح داخل المكون الإضافي antlr IDE.
الإعداد لهذا هو ضمن Windows> تفضيلات> antlr> توليد الكود.
قم بتوسيع القسم العام وقم بإلغاء تحديد خيار التصحيح:
(مصدر: bpsite.net)
نصائح أخرى
هناك خيار -Debug في AntlR يتسبب في توليد رمز إضافي مما يسمح بإجراء تصحيح عن بُعد. عندما يتوقف الكود على
dbg.Handshake();
اتصل ، إنه ينتظر اتصال الأخطاء عن بُعد. في Antlrworks ، يمكنك استخدام خيار Run -> Debug عن بُعد للاتصال به والتخطي عبر الكود.
إذا كنت لا ترغب في استخدام وظيفة تصحيح الأخطاء عن بُعد ، فقم بإزالة خيار -debug من مربع نص خيارات AntlR.
ملف -> تفضيلات -> خيارات عامة -> antlr