Хм, это не зависит от языка, я бы предпочел сделать это на C # или F #, но на этот раз меня больше интересует вопрос "как бы это работало в любом случае".
Что я хочу сделать, это:
а) Я хочу узнать это - на этот раз это мое эго, это интересный проект, в котором я хочу показать себе, что я действительно хорош в этом деле
б) Я немного знаю о EBNF (хотя я пока не знаю, как работает приоритет операторов в EBNF - Irony.NET все делает правильно, я проверил примеры, но это немного зловеще для меня)
в) Мой парсер должен быть в состоянии принять это: 5 * (3 + (2 - 9 * (5/7)) + 9), например, и дать мне правильные результаты
d) Честно говоря, это кажется самой большой проблемой при написании компилятора или даже интерпретатора для меня. У меня не было бы проблем с генерацией даже 64-битного ассемблерного кода (я могу написать ассемблер вручную), но парсер формул ...
e) Еще одна мысль: даже простые компьютеры (например, мой старый Sharp 1246S с оперативной памятью всего около 2 КБ) могут это сделать ... это не может быть ЧТО сложно, верно? И даже очень, очень старые языки программирования имеют оценку формул ... БЕЙСИК с 1964 года, и они уже могли рассчитывать форму формулы, которую я представил в качестве примера
f) Несколько идей, немного вдохновения было бы действительно достаточно - я просто понятия не имею, как сделать приоритет оператора и скобки - я, однако, знаю, что он включает в себя AST и что многие люди используют стек
Итак, что вы думаете?