Ответ 1
Кажется, вы хотите сделать две отдельные вещи, красиво отобразить уравнение и оценить его. Поэтому вам нужен инструмент, который делает то и другое. Латекс больше ориентируется на презентацию, а не на оценку, хотя ее можно оценить (см. Этот ответ: Есть ли калькулятор с синтаксисом LaTeX?) по крайней мере для подмножество.
Многое зависит от того, насколько сложным вы хотите сделать калькулятор - какие операции вы хотите разрешить. Если вы используете небольшое подмножество (и это похоже на вас), было бы довольно легко написать конвертер вручную. Я бы рассмотрел MathML, который имеет как презентационную, так и смысловую разметку - и многие доступные инструменты. Однако это может быть не самым простым для ваших пользователей.
Если пользователи знакомы с латексом, а подмножество включенных символов мало, тогда было бы достаточно просто проанализировать латекс в формате, который может быть непосредственно оценен.
Я думаю, вам нужно точно определить, что вы разрешаете пользователю, чтобы кто-нибудь мог дать лучший пример того, что является "лучшим".
EDIT - в ответ на ваше обновление
Ну, вы опасно близки к написанию полного языка программирования (все, что вам нужно, это условия и циклы - или метки). Поэтому изобретать колесо не кажется отличной идеей. В этом случае я определенно не думаю, что вы хотите, чтобы LaTeX был вашим языком ввода, в идеале вам нужно что-то более знакомое вашим пользователям.
Следующее - это то, что я сделал бы и где бы я начал, если бы я собирался это сделать, это не окончательный ответ, и я бы сделал намного больше исследований, прежде чем начинать убеждаться, что я не дублирую усилия.
Я бы построил парсер, который принимает подмножество JavaScript, этот анализатор выполнил бы две вещи (или два парсера), чтобы преобразовать код в LaTeX или MathML, а второй - для оценки/выполнения код.
Выполняя это в автономном режиме, я перехожу к Lex и Yacc (или Flex и Bison и т.д.), и быстрый Google показывает там эквивалент Javascript: Jison. Это даст вам основу синтаксического анализатора для языка, и вы можете изменить его.
Альтернативно начать с существующего парсера JS может помочь, попробуйте этот ответ: JavaScript-парсер в JavaScript. Т
После того, как у вас есть синтаксическая разборка, вы можете сохранить ее простой вначале - перевод на отображаемый язык должен быть довольно простым, и для оценки вы рискуете просто использовать eval
- потому что парсер уже обеспечит, чтобы входной сигнал использует только то, что вы разрешаете. Однако я бы посоветовал это сделать в производственной версии (это хорошо для теста), и не нужно много дополнительной работы, чтобы сопоставить маркеры с внутренними функциями.
После этого вы можете посмотреть на улучшение отображаемого вывода, возможно, вы захотите попробовать и упростить ввод или изменить порядок, чтобы иметь больше смысла. Для этого потребуется взять внутреннее представление из вашего парсера и сделать некоторые умные вещи на нем. Но сначала сделайте первые шаги.
Вы хотите, чтобы это работало в автономном режиме, поэтому другая идея сервера, на котором размещены некоторые другие примеры программ, которые вы цитируете, не будет работать (и использование Wolfram Alpha или Google - хороший вариант там, но, поскольку вы скажем, какая точка программы тогда). Но вы также можете подумать, не лучше ли начать писать на другом базовом языке, хотя я предполагаю, что вы хотите переносимость HTML/JS/CSS.
Другими вещами, которые вы связываете, являются все другие возможные идеи, я просто думаю, что вы получите больше преимуществ, имея собственный собственный парсер, вместо того, чтобы полагаться на сторонний код для каждого приложения. С помощью собственного анализатора вы можете легко добавить функциональность или языковые функции позже.
Заключительная мысль, вы не обязательно ограничиваете Javascript как вход с этим методом. Если вы считаете, что ваши пользователи справятся с Reverse Polish Notation, тогда легко написать парсер вручную - но вам нужно будет сделать некоторые работайте над его форматированием для вывода.