سؤال

ولدي محلل التي هي في الواقع مجموعة من الوظائف متكررة تعمل على سلسلة من الرموز lexer.

والمشكلة أنا على التوالي إلى أن تسلسل يبدو أن إعادة تشغيل من البداية على المكالمات وظيفة متكررة. وبالنظر إلى تعريف الهيكل العظمي التالية من أجل وظيفة Parse

    let restricted = Seq.take_while token_search tokens
    let compiled_nodes = Seq.fold (fun list (next: Lexer.Token) -> list @ parse_token this restricted next) [] restricted

وقد يؤدي parse_token وظيفة في مكالمة إلى Parse.

ولكن عندما يحدث ذلك، فإن tokens المعلمة ينتهي وضعه في بداية التسلسل.

وأي أفكار حول كيفية الحفاظ على تسلسل وضعه حيث يجب أن تكون؟

وتيا

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

المحلول

وأعتقد أنك قد تحتاج إلى إضافة قصاصة أكبر قليلا، وأنا لا تتبع تماما لك.

وقال ان تسلسل (IEnumerable) ليست سوى ذلك - تسلسل، وفي كل مرة كنت ل(foreach) أو Seq.Whatever أكثر من ذلك، فإنه سيتم "إعادة أعاد 'التسلسل. أنا غير الواضح ما تريد القيام به، وماذا تتوقع أن يحدث، ولكن لتحليل، قد تكون تمثل "الرموز" كتسلسل 'الخطأ'، كما تفعل عادة الرموز القسم إلى منطقة المستهلكة / ملتزمة ومنطقة lookahead.

ملحوظة أيضا التي عادة لا يريدون "بالتكرار عبر سلسلة 'أن يكون من الآثار الجانبية.

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