Умный дизайн математического синтаксического анализатора?

56
задан Kirill Kobelev 9 December 2016 в 20:38
поделиться

7 ответов

Довольно хороший подход включил бы два шага. Первый шаг включает преобразование выражения от инфикса для добавления постфикса (например, через сортировочная станция Dijkstra ) нотация. Как только это сделано, это довольно тривиально для записи постфиксное средство анализа .

87
ответ дан fasseg 26 November 2019 в 17:16
поделиться

Я записал несколько сообщений в блоге о разработке математического синтаксического анализатора. Существует генерал введение , элементарные знания [приблизительно 111] грамматики , демонстрационная реализация, записанная в Ruby и набор тестов . Возможно, Вы найдете эти материалы полезными.

13
ответ дан 26 November 2019 в 17:16
поделиться

У Вас есть несколько подходов. Вы могли генерировать динамический код и выполнить его для получения ответа, не будучи должен записать много кода. Просто выполните, поиск на времени выполнения генерировал код в.NET и существует много примеров вокруг.

, Кроме того, Вы могли создать фактический синтаксический анализатор и генерировать немного дерева синтаксического анализа, которое тогда используется для оценки выражения. Снова это довольно просто для основных выражений. Проверьте codeplex, поскольку я полагаю, что у них есть математический синтаксический анализатор на там. Или просто ищите BNF, который будет включать примеры. Любой веб-сайт, представляющий понятия компилятора, будет включать это как основной пример.

Средство анализа Выражения Codeplex

6
ответ дан Phil Wright 26 November 2019 в 17:16
поделиться

Если Вы имеете "всегда на" приложении, просто отправляете математическую строку, чтобы погуглить и проанализировать результат. Простой путь, но не уверенный, если это - то, в чем Вы нуждаетесь - но умный в некотором роде, я предполагаю.

3
ответ дан JRoppert 26 November 2019 в 17:16
поделиться

Связанный вопрос Уравнение (выражение) синтаксический анализатор с приоритетом? имеет некоторую хорошую информацию о том, как начать с этим также.

-Adam

3
ответ дан Community 26 November 2019 в 17:16
поделиться

Принятие Вашего входа является инфиксным выражением в формате строки, Вы могли преобразовать его в постфикс и, с помощью пары стеков: стопка оператора и стопка операнда, работайте решение оттуда. Можно найти общую информацию об алгоритме в ссылке Википедии.

1
ответ дан Sam Erwin 26 November 2019 в 17:16
поделиться

ANTLR является очень хорошим LL (*) парсер-генератор. Я рекомендую его высоко.

1
ответ дан duffymo 26 November 2019 в 17:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: