Парсинг основных математических уравнений для детского образовательного программного обеспечения?

Вы можете использовать этот код:

for item in scanList:
    list = []
    for key, value in item.iteritems():
        list.append(value)
    joinlist.append(list)
7
задан Glorfindel 6 March 2019 в 14:05
поделиться

6 ответов

Вы могли бы посмотреть на Алгоритм Сортировочной станции. Связанная страница Википедии имеет тонну информации и ссылок на различные примеры алгоритма.

В основном, учитывая выражение в инфиксе математическая нотация, это отдает AST или Обратную польскую запись, независимо от того, что Ваше предпочтение могло бы быть.

Эта страница довольно хороша. Существует также пара похожие страницы вопросы на ТАК.

3
ответ дан 7 December 2019 в 12:25
поделиться

На большом количестве современных языков существуют методы для оценки арифметических строковых выражений. Например, в Python

>>> a = '1+3*3'     
>>> eval(a)         
10    

Вы могли использовать обработку исключений для ловли недопустимого синтаксиса.

Кроме того, можно создать деревья арифметического выражения, существуют некоторые примеры их здесь в ТАК: Деревья выражений для Макетов.

1
ответ дан 7 December 2019 в 12:25
поделиться

Как указано выше, я преобразовал бы нормальную строку (инфиксная нотация) в сообщение, фиксируют выражение.

Затем учитывая постфиксное выражение легко проанализировать через и оценить выражение. Например, добавьте операнды к стеку и когда Вы найдете оператор, поп-значения от стека и примените их оператор к операндам. Если Ваш код для преобразования его в сообщение фиксирует выражение, корректно, Вы не должны должны быть волноваться о порядке операций или чего-либо как этот.

Большинство работы в этом случае было бы, вероятно, сделано в преобразовании. Вы могли сохранить преобразованную форму в списке или массиве для легкого доступа, таким образом, Вы не должны действительно анализировать каждое значение снова также.

1
ответ дан 7 December 2019 в 12:25
поделиться

Вы говорите, что несколько операторов подряд не действительны. Но думайте о:

5 + -2

Который совершенно допустим.

Самая основная грамматика выражения похожа:

Expression = Term | Expression, AddOp, Term
Term       = Factor | Term, MulOp, Factor
Factor     = Number | SignOp, Factor | '(', Expression, ')'

AddOp      = '+' | '-'
MulOp      = '*' | '/'
SignOp     = '+' | '-'

Number     = Digit | Number, Digit
Digit      = '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'

Я однажды записал простой легкий синтаксический анализатор/средство анализа выражения (строка в числе), который мог обработать переменные и функции. Код находится в Delphi, но Это не должно быть это трудно для перевода. Если Вам интересно, я могу поместить исходный код онлайн.

0
ответ дан 7 December 2019 в 12:25
поделиться

Еще одно замечание: существует множество доступных библиотек синтаксического анализа, которые человек может использовать для выполнения этой задачи. Нетривиально написать хороший синтаксический анализатор выражений с нуля, поэтому я бы рекомендовал проверить библиотеку.

Я работаю в Singular Systems, которая специализируется на математических компонентах. Мы предлагаем два математических анализатора Jep Java и Jep.Net , которые могут помочь вам в решении вашей проблемы. Удачи!

Мы предлагаем два математических анализатора Jep Java и Jep.Net , которые могут помочь вам в решении вашей проблемы. Удачи!

Мы предлагаем два математических анализатора Jep Java и Jep.Net , которые могут помочь вам в решении вашей проблемы. Удачи!

0
ответ дан 7 December 2019 в 12:25
поделиться

Для этой аудитории вы захотите давать обратную связь об ошибках совсем иначе, чем для программистов, привыкших к сообщениям типа "Syntax error: unexpected '/' at position foo." Я пытался сделать что-то лучшее для образовательных апплетов здесь:

http://github.com/darius/expr

Основные идеи: пойти на необычные меры, чтобы найти минимальную правку, восстанавливающую разборчивость (практично, поскольку входные выражения не имеют длины страниц), и генерировать более длинное объяснение на простом английском языке того, на чем застрял парсер.

0
ответ дан 7 December 2019 в 12:25
поделиться
Другие вопросы по тегам:

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