سؤال

هل يمكنني كتابة قاعدة حيث يتم إصلاح الرمز الأولية جزئيا وجيرة جزئيا؟

rule: ID '=' NUMBER
      ;

ID: (A.. Z | a.. Z) +

NUMBER: (0 .. 9) +

ولكن فقط إذا كان معرف الرمز المميز في النموذج var * (var ثابت)

شكرا

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

المحلول

هل تقصد هذا؟

// Use this instead of ID in all parser rules that take either token
identifier
    :   VAR_ID | ID
    ;

VAR_ID
    :   'var' ('A'..'Z' | 'a'..'z')*
    ;

ID
    :   ('A'..'Z' | 'a'..'z')+
    ;

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

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