هذا محلل PHP في مرحلة مبكرة تم تصميمه منذ البداية لسيناريوهات استخدام IDE (راجع أهداف التصميم لمزيد من التفاصيل). لا يزال هناك الكثير من العمل الذي يتعين القيام به، لذا في هذه المرحلة، يعد هذا الريبو بمثابة تجربة وبداية محادثة.
هذا هو الفرع v0.1، الذي يقوم بتغيير بنيات البيانات لدعم بناء الجملة المُضاف بعد سطر الإصدار 0.0.x الأولي.
بعد تكوين جهازك، يمكنك استخدام المحلل اللغوي لإنشاء شجرة بناء الجملة المجردة (AST) والعمل معها عبر واجهة برمجة تطبيقات سهلة الاستخدام.
<?php// التحميل التلقائي للفئات المطلوبة يتطلب __DIR__ . "/vendor/autoload.php";use MicrosoftPhpParser{DiagnosticsProvider, Node, Parser, PositionUtilities};// إنشاء مثيل محلل جديد$parser = new Parser();// إرجاع وطباعة AST من محتويات السلسلة$astNode = $parser ->parseSourceFile('<?php /* تعليق */ echo "hi!"');var_dump($astNode);// الحصول على الأخطاء وطباعتها من AST Node. يعالج المحلل اللغوي الأخطاء بأمان، // بحيث يمكن استخدامه في سيناريوهات استخدام IDE (حيث تكون التعليمات البرمجية غالبًا غير مكتملة).$errors = DiagnosticsProvider::getDiagnostics($astNode);var_dump($errors);// اجتياز جميع أحفاد العقدة $astNodeforeach ($astNode->getDescendantNodes() كـ $descendant) {if ($مثيل تنازلي of NodeStringLiteral) {// اطبع نص العقدة (بدون مسافة بيضاء أو تعليقات)var_dump($descendant->getText());// ترتبط جميع العقد بالعقد الأصلية، لذلك يكون من السهل التنقل في الشجرة.$grandParent = $descendant- >getParent()->getParent();var_dump($grandParent->getNodeKindName());// AST هو تمثيلي بالكامل، وقابل للرجوع إلى المصدر الأصلي. // وهذا يتيح للمستهلكين إنشاء أدوات موثوقة للتنسيق وإعادة البناء. var_dump($grandParent->getLeadingCommentAndWhitespaceText()); }// بالإضافة إلى استرداد كافة العناصر التابعة أو المتحدرة من العقدة،// تعرض العقد خصائص خاصة بنوع العقدة.if ($descendant exampleof NodeExpressionEchoExpression) {$echoKeywordStartPosition = $descendant->echoKeyword->getStartPosition();// لتقليل استهلاك الذاكرة، يتم تمثيل المواضع كعدد صحيح واحد // فهرس في المستند، ولكن يمكن بسهولة تحديد مواضع الأسطر والأحرف الخاصة بها تم استرداده.$lineCharacterPosition = PositionUtilities::getLineCharacterPositionFromPosition($echoKeywordStartPosition,$descendant->getFileContents() );echo "line: $lineCharacterPosition->line، الحرف: $lineCharacterPosition->character"; } }
ملاحظة: واجهة برمجة التطبيقات (API) لم يتم الانتهاء منها بعد، لذا يرجى إعلامنا بالمشاكل التي تريد كشفها، وسنرى ما يمكننا فعله! يرجى أيضًا الإبلاغ عن أي أخطاء ذات سلوك غير متوقع في شجرة التحليل. ما زلنا في مراحلنا الأولى، وأي تعليقات لديك موضع تقدير كبير.
تصميم متسامح مع الأخطاء - في سيناريوهات IDE، تكون التعليمات البرمجية، حسب التعريف، غير مكتملة. في حالة إدخال رمز غير صالح، يجب أن يظل المحلل اللغوي قادرًا على استرداد وإنتاج شجرة صالحة + كاملة، بالإضافة إلى التشخيصات ذات الصلة.
سريع وخفيف الوزن (يجب أن يكون قادرًا على تحليل عدة ميغابايت من كود المصدر في الثانية، لإفساح المجال لميزات أخرى).
هياكل البيانات الموفرة للذاكرة
السماح للتحليل المتزايد في المستقبل
يلتزم بمواصفات لغة PHP، ويدعم القواعد النحوية PHP5 وPHP7
توفر AST المُنشأة الخصائص (التمثيلية الكاملة، وما إلى ذلك) اللازمة للعمليات الدلالية والتحويلية، والتي تحتاج أيضًا إلى أن تكون فعالة.
تمثيلي بالكامل ويمكن الرجوع إليه ذهابًا وإيابًا إلى النص الذي تم تحليله منه (يتم تضمين جميع المسافات البيضاء والتعليقات "التافهة" في شجرة التحليل)
من الممكن اجتياز الشجرة بسهولة من خلال العقد الأصلية/الفرعية
< 100 مللي ثانية وقت استجابة واجهة المستخدم، لذلك يجب أن تكون كل عملية خادم لغة أقل من 50 مللي ثانية لإفساح المجال لجميع الأشياء الأخرى التي تحدث بالتوازي.
بسيطة وقابلة للصيانة بمرور الوقت - يميل المحللون إلى أن يصبحوا مربكين للغاية وسريعين للغاية، لذا فإن سهولة القراءة والقدرة على تصحيح الأخطاء لها أولوية عالية.
قابلة للاختبار - يجب أن ينتج المحلل اللغوي أشجار تحليل صالحة بشكل يمكن إثباته. نحقق ذلك من خلال تحديد مجموعة من الثوابت حول الشجرة واختبارها بشكل مستمر.
واجهة برمجة تطبيقات سهلة الاستخدام ووصفية لتسهل على الآخرين البناء عليها.
مكتوب بلغة PHP - اجعل الأمر سهلاً قدر الإمكان على مجتمع PHP للاستهلاك والمساهمة.
لضمان مستوى كافٍ من الصحة في كل خطوة على الطريق، يتم تطوير المحلل اللغوي باستخدام النهج التدريجي التالي:
المرحلة الأولى: كتابة معجم لا يدعم قواعد لغة PHP، ولكنه يدعم الرموز المميزة غير المعروفة وEOF. كتابة الاختبارات لجميع الثوابت.
المرحلة 2: دعم القواعد النحوية المعجمية PHP، والكثير من الاختبارات
المرحلة 3: كتابة محلل لا يدعم قواعد لغة PHP، ولكنه ينتج شجرة من عقد الأخطاء. كتابة الاختبارات لجميع الثوابت.
المرحلة 4: دعم قواعد PHP النحوية، والكثير من الاختبارات
المرحلة الخامسة (قيد التنفيذ): التحقق والتحسين في العالم الحقيقي
الصحة: التحقق من عدم وجود أخطاء في نماذج قواعد التعليمات البرمجية، والمقارنة مع المحللين الآخرين (التحقيق في أي حالة اختلاف)، واختبار الغموض
الأداء: الملف الشخصي، المعيار القياسي مقابل تطبيقات PHP الكبيرة
المرحلة 6: الانتهاء من واجهة برمجة التطبيقات لتسهيل استهلاك الأشخاص قدر الإمكان.
عدد قليل من التركيبات النحوية PHP (أي تعبير العائد وسلاسل القالب) غير مدعومة حتى الآن وهناك أيضًا أخطاء متنوعة أخرى. ومع ذلك، نظرًا لأن المحلل اللغوي يتسامح مع الأخطاء، تتم معالجة هذه الأخطاء بأمان، وتكون الشجرة الناتجة مكتملة. للحصول على فكرة أكثر شمولية عن ما نحن فيه، يمكنك تشغيل مجموعة اختبار "التحقق من الصحة" (راجع إرشادات المساهمة لمزيد من المعلومات حول إجراء الاختبارات). أو ببساطة، قم بإلقاء نظرة على نتائج اختبار التحقق من الصحة الحالية.
على الرغم من أننا لم نبدأ بعد مرحلة تحسين الأداء، فقد شهدنا نتائج واعدة حتى الآن، ولدينا مجال أكبر للتحسين. راجع كيفية العمل للحصول على تفاصيل حول نهجنا الحالي، وقم بإجراء اختبارات الأداء على جهازك الخاص لترى بنفسك.
أهداف التصميم - تعرف على أهداف تصميم المشروع (الميزات، ومقاييس الأداء، والمزيد).
التوثيق - تعرف على كيفية الرجوع إلى المحلل اللغوي من مشروعك، وكيفية إجراء العمليات على AST للإجابة على الأسئلة المتعلقة بالرمز الخاص بك.
أداة تصور بناء الجملة - احصل على إحساس ملموس أكثر بـ AST. كن مبدعًا - لترى ما إذا كان بإمكانك كسره!
الوضع الحالي والنهج - ما مقدار القواعد المدعومة؟ أداء؟ ذاكرة؟ استقرار واجهة برمجة التطبيقات؟
كيف يعمل - تعرف على الهندسة المعمارية وقرارات التصميم والمقايضات.
ليكسر ومحلل
استراتيجية التسامح مع الخطأ
التحليل التزايدي
أسئلة مفتوحة
استراتيجية التحقق من الصحة
يساهم! - تعرف على كيفية المشاركة، وتحقق من بعض المؤشرات للالتزامات التعليمية التي ستساعدك على زيادة قاعدة التعليمات البرمجية (حتى لو لم تعمل مطلقًا على محلل من قبل)، ومهام سير العمل الموصى بها التي تسهل تكرارها.
اعتمد هذا المشروع قواعد السلوك الخاصة بشركة Microsoft مفتوحة المصدر. لمزيد من المعلومات، راجع الأسئلة الشائعة حول قواعد السلوك أو اتصل بـ [email protected] لطرح أي أسئلة أو تعليقات إضافية.