سؤال

إذن هذا ما أتطلع إلى تحقيقه.أرغب في منح المستخدمين مربع نص واحدًا يشبه Google حيث يمكنهم كتابة استفساراتهم.وأود أن يكونوا قادرين على التعبير بلغة شبه طبيعية مثل

"view all between 1/1/2008 and 1/2/2008"

لا بأس إذا كان بناء الجملة يجب أن يكون منظمًا إلى حد ما ومقتصرًا على هذا المجال المحدد ...هؤلاء هم المستخدمين الخبراء الذين سيستخدمون هذا.

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

هذا في C# :-)

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

المحلول

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

ولكن، مرة أخرى، أود أن أتفق معه، أنه إذا كنت تريد أن تفعل ذلك، ANTLR هو الطريق للذهاب. هناك دروس على الموقع يمكن أن تساعدك على بدء. في الأساس، وسوف تحتاج لوصف كيفية بناء الجملة باستخدام باكوس نور النموذج التدوين.

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

إذا كنت حقا في هذه و / أو تريد أن تمتد أجنحة البرمجة الخاصة بك قليلا، هل يمكن قراءة المزيد حول هذا الموضوع مع كتاب التنين، AKA المجمعين: المبادئ والتقنيات والأدوات

وحظا سعيدا يا صديقي.

نصائح أخرى

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

وإذا كانت لغتك معقدة نسبيا (كنت لا تمانع في تحديد الشيء كله في ملف قواعد واحد)، كنت اذهب مع <لأ href = "http://www.ssw.uni-linz.ac. في / بحوث / مشاريع / كوكو / "يختلط =" نوفولو noreferrer "> كوكو / R - انها سريعة وسهلة الاستخدام، ويجعل كود تصحيح الأخطاء للغاية

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

لقد كنت في هذه الحالة من قبل.بعد الكثير من المناقشات، قررنا أن القوائم المنسدلة الحساسة للسياق كانت حلاً أفضل من مجرد مربع نص.

على سبيل المثال، لديك 4 قوائم منسدلة، ولكن الثلاث الأخيرة معطلة.وبعد ذلك، عندما يحدد المستخدم خيارًا من الخيار الأول، فإنه يقوم بملء الخيارات الأخرى وتمكينها.لذلك سيختارون "عرض الكل" ثم "بين"، وبعد ذلك ربما يفتحون مربع نص أو تقويمًا للاثنين الأخيرين.

إليك مثال يشبه إلى حد ما ما أتحدث عنه

وشجرة التعبير هو فكرة جيدة. هناك العديد من موزعي عامة جيدة ومولدات محلل هناك، مفتوح المصدر، وكذلك التجارية، والتي يمكن تحويل سلاسل الاستعلام الصحيحة في أشجار التعبير.

أوسلو ، انها مصممة خصيصا لهذا ...

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

GOLD محلل مولد لديه واجهة مفيدة لتصميم واختبار قواعد اللغة الخاصة بك، ودروس جيدة بشكل معقول والوثائق، وسهلة الاستخدام من C #.

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

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