ANTLR4 لا يقوم بتحليل typedef
سؤال
أنا أستخدم 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؟