هل هناك أي وظيفة مدمجة لاقتباسات F # قابلة للقراءة البشرية؟

StackOverflow https://stackoverflow.com/questions/1448961

  •  11-09-2019
  •  | 
  •  

سؤال

عند الاقتباس

<@ 1 + 1 @>

أريد "1 + 1"

بدلا من

"Call (None, Int32 op_Addition[Int32,Int32,Int32](Int32, Int32), [Value (1), Value (1)])"

لا يوجد حل صحيح

نصائح أخرى

سيكون عليك أن تكتبها بنفسك. انظر F # الاقتباسات رمز كدليل لتحويل عروض الأسعار مجردة شجرة بناء جملة.

لقد قمت بتنفيذ decompiler اقتباس كجزء من مشروع أكبر مفتوح المصدر unquote.. وبعد يمكن أن ترمز العديد من التعبيرات المعروضة بسيطة F # كسلاسل بناء على بناء جملة غير خفيفة واحدة (انظر الصفحة الرئيسية للمشروع للحصول على قائمة ميزات Defoodiler). علي سبيل المثال،

> decompile <@ (11 + 3) / 2 = String.length ("hello world".Substring(4, 5)) @>;;
val it : string =
  "(11 + 3) / 2 = String.length ("hello world".Substring(4, 5))"

kurt Schelfthout صحيحة حول التحديات الكثيرة التي تواجهها عند ترصيلة اقتباسات F # في شكل الإنسان قابل للقراءة. ولكن من عملي حتى الآن، أعتقد أنه يكون من الممكن كتابة decompiler اقتباس يمكن أن تولد صيح كود F #. اتخاذ التعبيرات المباراة وتعبيرات حساب على سبيل المثال، فك الترفيل يمكن إنتاج رمز F # الصحيح في الحالات البسيطة التالية:

> decompile <@ match true with | true -> "hi" | _ -> "bye"  @>;;
val it : string =
  "let matchValue = true in if matchValue then "hi" else "bye""

> decompile <@ seq {yield 1; yield 2}  @>;;
val it : string =
  "seq (Seq.delay (fun unitVar -> Seq.append (Seq.singleton 1) (Seq.delay (fun unitVar -> Seq.singleton 2))))"

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

لا يوجد شيء، وليس بهذه السهولة، إلا في حالات بسيطة للغاية. واحدة من المشاكل الرئيسية، على سبيل المثال، هي بناء المباراة. من السكر النحوي لمجموعة كاملة من إذا تبديل البيانات (حاول طباعة اقتباس مع تطابق في، سترى). آخر واحد من هؤلاء المعظمات تعبيرات حسابية، ولكن أعتقد أنك يمكن أن تخطي تلك الموجودة في البداية.

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

الكل في الكل، قابلة للتنفيذ، ولكن ليست تافهة. نوع من مثل فك

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