سؤال

أنا أكتب بعض تطبيقات وحدة التحكم C ++ الشبيهة ببرنامج Excel للواجبات المنزلية.يجب أن يكون تطبيقي قادرًا على قبول الصيغ لخلاياه، على سبيل المثال يجب أن يقوم بتقييم شيء مثل هذا:

Sum(tablename\fieldname[recordnumber], fieldname[recordnumber], ...)

tablename\fieldname[recordnumber] points to a cell in another table, 
fieldname[recordnumber] points to a cell in current table

أو

Sin(fieldname[recordnumber])

أو

anotherfieldname[recordnumber]

أو

"10" // (simply a number)

شئ مثل هذا.الوظائف هي Sum، Ave، Sin، Cos، Tan، Cot، Mul، Div، Pow، Log (10)، Ln، Mod

أعلم أنه أمر مثير للشفقة، لكنه واجبي المنزلي :'(

فهل يعرف أحد خدعة لتقييم شيء مثل هذا؟

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

المحلول

حسنًا، سؤال واجب منزلي جميل بالمناسبة.

يعتمد الأمر حقًا على مدى الثقل الذي تريد أن يكون عليه هذا.يمكنك إنشاء محلل تعبير كامل (وهو أمر ممتع ولكنه يستغرق وقتًا طويلاً أيضًا).

للقيام بذلك، تحتاج إلى وصف القواعد النحوية الكاملة وكتابة الواجهة الأمامية (ألق نظرة على lex وyacc أو flexx وbison.

ولكن كما أرى سؤالك يمكنك أن تقتصر على ثلاث حالات فرعية:

  • قيمة بسيطة
  • بحث (ربما إلى جدول آخر)
  • وظيفة المدخلات هي عمليات البحث

أعتقد أن القليل من تصميم OO يمكن أن يساعدك هنا.

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

نصائح أخرى

لإعراب، وأود أن ننظر في توزيع النسب تكراري. ثم لديك جدول التي تعين جميع الأسماء المهمة التي يمكن أن تعمل مؤشرات:

struct FunctionTableEntry {
    string name;
    double (*f)(double);
};

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

لقد ضربها المستجيبون السابقون على الرأس: تحتاج إلى تحليل محتويات الخلية وتفسيرها.

يحتوي StackOverflow بالفعل على عدد كبير من الأسئلة حول إنشاء المترجمين والمترجمين حيث يمكنك العثور على مؤشرات للموارد.بعض منهم:

وما إلى ذلك وهلم جرا.

جانبا:لا أملك أبدًا الطاقة اللازمة لربطها جميعًا معًا، أو حتى محاولة بناء قائمة شاملة.

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

وربما يجب عليك قراءة بعض الشيء عن تحليل معجمية .

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