سؤال

أنا أستخدم ANTLR4 والقواعد النحوية الأساسية لـ C كما هو موجود هنا:
https://github.com/antlr/grammars-v4/tree/master/c

أنا لا أقوم بتعديل القواعد بأي شكل من الأشكال.أجد أن التحليل فاشل typedef العبارات التي تحدث خارج الوظائف.أبسط مثال يمكنني تقديمه:

يمر، يمرر، اجتاز بنجاح:

main()
{
    typedef unsigned int UINT;
    return 0;
}

فشل:

typedef unsigned int UINT;

main()
{
    return 0;
}

رسالة الخطأ هي:

السطر 1:0 لا يوجد بديل قابل للتطبيق عند الإدخال "typedef"

لست على علم بأي قاعدة في لغة C تنص على أن محددات الكتابة يجب أن تظهر داخل الوظائف.هل هذا خطأ في قواعد ANTLR C أم أنني أفعل شيئًا خاطئًا؟

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

المحلول

تناسبني:

antlr4 C.g4 javac *.java grun C compilationUnit -tree t.c (compilationUnit (translationUnit (translationUnit (externalDeclaration (declaration (declarationSpecifiers (declarationSpecifier (storageClassSpecifier typedef)) (declarationSpecifier (typeSpecifier unsigned)) (declarationSpecifier (typeSpecifier int)) (declarationSpecifier (typeSpecifier (typedefName UINT)))) ;))) (externalDeclaration (functionDefinition (declarator (directDeclarator (directDeclarator main) ( ))) (compoundStatement { (blockItemList (blockItem (statement (jumpStatement return (expression (assignmentExpression (conditionalExpression (logicalOrExpression (logicalAndExpression (inclusiveOrExpression (exclusiveOrExpression (andExpression (equalityExpression (relationalExpression (shiftExpression (additiveExpression (multiplicativeExpression (castExpression (unaryExpression (postfixExpression (primaryExpression 0))))))))))))))))) ;)))) })))) <EOF>)

مشكلة إصدار ANTLR؟فرق classpath بين javac وantlr4؟

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