Аннотация:
Класс TParser занимается разбором математических выражений. Его можно применять в любых программах, в которых требуется расчёт значений функций, задаваемых пользователем. Класс написан на Visual C++, но может практически без изменений применяться с любыми другими компиляторами языка C++.
--
Я думал, ты огромный страшный Бажище,
А ты недоучка, крохотный Бажик...
An alternative to this could be loading VBScript or JScript engine (see ActiveX script hosting) and asking the engine to calculate an expression. Advantage is that you can add your or other COM libraries to the engine to participate in the calculation.
P>А почему только числовые значения. Со строками тоже хочется иметь дело. Складывать, вырезать и т.п.
Это то что действительно нужно.
Можно ли как-нибудь использовать Scripting Host для этих целей?
Re: Класс TParser
От:
Аноним
Дата:
31.10.03 03:20
Оценка:
Здравствуйте, Александр Шаргин, Вы писали:
АШ>Класс TParser занимается разбором математических выражений. Его можно применять в любых программах, в которых требуется расчёт значений функций, задаваемых пользователем. Класс написан на Visual C++, но может практически без изменений применяться с любыми другими компиляторами языка C++.
Дело в том, что часто проблемная область заставляет задумываться над тем, как лучше записывать (представлять) выражения, ведь <b>фиксированный</b> С-like синтаксис приемлем далеко не всегда.
Обычно подобные парсеры (очевидно реализуемые методом рекурсивного спуска) пишутся за 1 вечер руками, или за то же время можно получить LALR(1) табличный парсер с использованием yacc или его OO-вариаций.
Наверное дальнейшая задача Вашему парсеру — стать "настраиваемым" под user-синтаксис и определенные юзером лексемы, если при этом получится сделать это понятным для юзеров — то Ваш продукт будет востребован, особенно в студенческой среде.
Здравствуйте, Александр Шаргин, Вы писали:
АШ>Статья:
АШ>Авторы: АШ> Александр Шаргин
АШ>Аннотация: АШ>Класс TParser занимается разбором математических выражений. Его можно применять в любых программах, в которых требуется расчёт значений функций, задаваемых пользователем. Класс написан на Visual C++, но может практически без изменений применяться с любыми другими компиляторами языка C++.
Здравствуйте, Александр Шаргин, Вы писали:
АШ> Александр Шаргин
АШ>Аннотация: АШ>Класс TParser занимается разбором математических выражений. Его можно применять в любых программах, в которых требуется расчёт значений функций, задаваемых пользователем. Класс написан на Visual C++, но может практически без изменений применяться с любыми другими компиляторами языка C++.
А вот и ложка дегтя. Хотелось бы получить уточнение — для какой именно грамматики сделан данный парсер с точки зрения автора. Нетрудно видеть, что поскольку в исходниках отсутствует какое-либо упоминание приоритетов операций, парсер предназначен для довольно экзотических задач. Для каких?
Недостатком парсера является то, что неграмотный юсер может в строчке, которую нужно разобрать, написать x[100000], а програмист задал массив всего из 10 иксов. Ран-Тайм ошибка получается. А лексический анализ текста мне делать ой как не хочется. Да и зачем? Просто у функции SetX нужно передавать не только массив, но и его размер, и еще че-то там дописать в других функциях.
Или я чего-то не понимаю?
Любая задача имеет решение, даже когда решения не существует
АШ>Авторы: АШ> Александр Шаргин
АШ>Аннотация: АШ>Класс TParser занимается разбором математических выражений. Его можно применять в любых программах, в которых требуется расчёт значений функций, задаваемых пользователем. Класс написан на Visual C++, но может практически без изменений применяться с любыми другими компиляторами языка C++.