كيفية التعامل مع قيم الإرجاع القائمة في Antlr
-
09-09-2019 - |
سؤال
ما هي الطريقة الصحيحة لحل هذه المشكلة في Antlr:
لدي قاعدة قواعد اللغة البسيطة، كما يقول لقائمة بعدد تعسفي من العناصر.
list
: '[]'
| '[' value (COMMA value)* ']'
إذا أردت تعيين قيمة إرجاع للقائمة، ولدي هذه القيمة تكون القائمة الفعلية للقيم التي تم إرجاعها من الإنتاج، فما هي الطريقة الصحيحة للقيام بذلك؟ البدائل أنا مسلية هي:
- قم بإنشاء مكدساتي في النطاق العالمي لتتبع هذه القوائم
- محاولة فحص عقد الشجرة أسفل لي واستخراج المعلومات بهذه الطريقة
- الوصول إليها في بعض البقع والطريقة الرائعة التي آمل أن أعرفها التي يمكنني الحصول عليها بسهولة الوصول إلى هذه القائمة من داخل الإجراءات المرتبطة بالقاعدة.
أعتقد أن السؤال هو: كيف يفعل الأطفال البارد ذلك؟
(لمعلوماتك أنا أستخدم بيثون API ل Antlr، ولكن إذا ضربتني بلغة أخرى، يمكنني التعامل مع ذلك)
المحلول
في C # قد تبدو مثل هذا:
list returns [ List<string> ValueList ]
@init
{
$ValueList = new List<string>();
}
: '[]'
| '[' value {$ValueList.Add(value);} (COMMA value {$ValueList.Add(value);})* ']'
;
نصائح أخرى
أعتقد أن طريقة أكثر وضوحا يمكن أن يكون
list returns [ List values ]
: '[]'
| '[' vs+=value (COMMA vs+=value)* ']' {
$values = $vs;
}
لا تنتمي إلى StackOverflow