Официальный сайт студ.городка НГТУ
Программирование и БД » [ C ] Парсер формул 

#1  12.12.05 15:54

[ C ] Парсер формул

Помогите написать парсер формул на языке C. Допустим задаём выражение: (a+b)/(c*sin(x)-a)+c*(a-b)*(b+c). Задаём a,b,c и x. Необходимо найти результат.

Как это сделать в BorlandC под DOS?

Offline

#2  12.12.05 17:13

Re: [ C ] Парсер формул

это надо ссемантический разбор делать, у нас такая ргр по компиляторам была
правда я её не делал

Offline

#3  12.12.05 17:57

Re: [ C ] Парсер формул

пошукай в нете.... есть много исходников парсеров, только там с 1-й переменнной.... ну суть сильно не меняется... (и кажется я только на ПАскале видел :) )

Offline

#4  12.12.05 18:00

Re: [ C ] Парсер формул

Сам я на Билдере с нуля писал - жуткая задача, если мат.части не знаешь...

Offline

#5  12.12.05 21:30

Re: [ C ] Парсер формул

как я понимаю всё сводится к распарсиванию формулы в дерево, узлани которого будут действия, а ветвями переменные.
Я никак алгоритм не могу придумать.
Andron_, у тебя не остались сырцы?

Offline

#6  12.12.05 22:09

Re: [ C ] Парсер формул

у меня в учебе есть лекции по компиляторам
правда читать долого придеться чтобы сделать свой разборщик!

Offline

#7  12.12.05 22:10

Re: [ C ] Парсер формул

ftp://onibaka/ucheba/trans_lectures_metodics_labs_of_Romanow/

Offline

#8  13.12.05 10:35

Re: [ C ] Парсер формул

Offline

#9  13.12.05 20:28

Re: [ C ] Парсер формул

A-Lex,

A-Lex написал(а):

у тебя не остались сырцы?

Сырцы то остались, но не поделюсь :)... слишком уж много сил вложено... :) Да и цель написания была несколько коммерческая (потом, правда, отпала)...

A-Lex написал(а):

как я понимаю всё сводится к распарсиванию формулы в дерево, узлани которого будут действия, а ветвями переменные.

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

Offline

#10  13.12.05 21:47

Re: [ C ] Парсер формул

Andron_ написал(а):

Первая версия у меня просто находила самые вложенные операции в строке, вычисляла их, на их место вставляла значение, потом находила следующую операцию и т.д....

хм интересная идея как интересно я до этого не дошел, надо будет попробовать

Offline

#11  13.12.05 22:48

Re: [ C ] Парсер формул

otaku написал(а):

хм интересная идея как интересно я до этого не дошел, надо будет попробовать

Причем, для упрощения парсинга я использовал массив на 1000 элементов, и каждое цифровое значение из строки заносил в массив, а в строку уже вставлял только индекс ячейки. И использовал только ячейки 3-х значные 100-999 :)
На AnsiString'ах работает жжжуть как медленно... :)

Offline

#12  15.12.05 15:07

Re: [ C ] Парсер формул

Есть такая софтина Bison. Скармливаешь ей грамматику, на выходе получаешь парсер для нее на C
http://www.gnu.org/software/bison/bison.html

Offline

#13  15.12.05 17:47

Re: [ C ] Парсер формул

спасибо за линки

Offline

#14  04.01.06 19:28

Re: [ C ] Парсер формул

помню в методе была готовая. через стек или очередь делали. "автор методы" - Лауферман. 1 курс. Хотя наверняка взяла прогу из какого-нибудь справочника

Offline

#15  07.01.06 15:01

Re: [ C ] Парсер формул

Offline

Программирование и БД » [ C ] Парсер формул 

ФутЕр:)

© Hostel Web Group, 2002-2025.   Сообщить об ошибке

Сгенерировано за 0.035 сек.
Выполнено 14 запросов.