Re: синтаксический анализатор мат.формул

From
Andrey Belyakov ()
To
All
Date
2000-02-28T14:09:36Z
Area
RU.ALGORITHMS
From: "Andrey Belyakov" <andrejb@care.lv>

Hi, Boris Rudakov !

>  >> Такие вещи должны решаться элементарнейшим
>  >> нисходящим разбором, если не являются частью
>  >> какого-то более крупного языка, тогда разбор
>  >> выражений для общности выполняется по единому
>  >> алгоритму транслятора.
>  AB> Даже если эти вещи не являются частью языка, их
>  AB> все равно проще сделать по единой методике.
> Я не это имел в виду. Я имел в виду что когда разбор
> выражений - отдельная самостоятельная задача, то нужно
> не долго думая писать классический нисходящий разбор.
Я об этом и говорю. Проще подставить описание _операций_
в таблицу, чем _писать_ весь разбор.

> А когда делается транслятор большого языка, то его парсер
> как правило пишится на языке транслятора трансляторов
> (например парсер С++ вручную просто сдохнешь писать)
> - языке Яка там, Бизона, Лекса, LX - много их, не суть, и
> тогда разбор выражений является мелкой подзадачкой,
> одним абзацем описания грамматики, и не требует
> специальных отдельных усилий.
Это понятно.

>  >> Вот и все. Просто и со вкусом.
>  AB> Смотрел минут пять пока нашел все операции, разбор
>  AB> которых поддерживается.
>  AB> Просто, но не со вкусом - цветочков не хватает. :)
> А чего там тебе не хватило ? Ж8-[=       .       =]
> Список функций - за полсотни (лень точно смотреть),
> практически вся тригонометрия, векторные, статистические
> функции - куча разной мути. Нет только матричных операций
> по причине ленности. Если ты про операторы - согласен,
> всякую побитовую и логическую беду я тоже не стал делать,
> т.к. калькулятор создавался только для вещественных вычислений
> (в силу предметной области).
Что-то я этого в приведенном коде не нашел :)

> Да и если уж на то пошло, согласись: такой текст можно практически
> не напрягаясь отимпрувить и отэкспандить как тебе надо новыми
> операциями.
Можно. После пары-тройки лет опыта - можно. Но есть и более
простой выход - описать требующиеся _операции_ в виде:
- символ оперции;
- приоритет
- порядок обработки
- коммутативность
занести их таблицу и забыть о том что еще что-то надо делать.
С внесением изменений справится и девочка после 10 классов.

> Было бы желание :)
А меня? :) Я лучше подумаю на синтезом кода.

Андрей.


--- ifmail v.2.15dev4
 * Origin: Demos online service (2:5020/400)