Удомельский форум   ◊
www.udomlya.ru | Медиа-Центр | Удомля КТВ | Старый форум

Вернуться   Удомельский форум > Hard&Soft > Программирование
Справка Пользователи Календарь Сообщения за день
 
 
Опции темы Опции просмотра
Старый 01.05.2006, 22:41   #1
Azz
Пользователь
 
Аватар для Azz
 
Регистрация: 26.04.2006
Адрес: Амстердам!!!
Сообщений: 48
Вы сказали Спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
По умолчанию TParser

Кто может толково обьяснить что такое TPasrser?
Как я понял это модуль для C\C++ и для Delphi используя который можно при входном данном 'X' получить на выходе значение заданной функции 'Y'
Например: y=5*x^2+x(x=2) он выдаст что y=22.
Так ли это? И можно ли его как нить переделать под Паскаль?
Azz вне форума  
Старый 02.05.2006, 08:42   #2
George
Местный
 
Регистрация: 26.04.2006
Сообщений: 413
Вы сказали Спасибо: 113
Поблагодарили 153 раз(а) в 70 сообщениях
Отправить сообщение для George с помощью ICQ
По умолчанию

Цитата:
Сообщение от Azz
Кто может толково обьяснить что такое TPasrser?
Как я понял это модуль для C\C++ и для Delphi используя который можно при входном данном 'X' получить на выходе значение заданной функции 'Y'
Например: y=5*x^2+x(x=2) он выдаст что y=22.
Так ли это? И можно ли его как нить переделать под Паскаль?
Нет. Этот класс в основном применяется для ввода данных из потока. Завтра я тебе побольше про него напишу, щас под рукой ничего нет
__________________
С наилучшими пожеланиями
George
George вне форума  
Старый 02.05.2006, 18:31   #3
Pitty
Местный
 
Регистрация: 26.04.2006
Адрес: Удомля, гдежещё
Сообщений: 1,986
Вы сказали Спасибо: 676
Поблагодарили 257 раз(а) в 167 сообщениях
По умолчанию

Как показывает моя практика - то что сделано через потоки можно переделать под без потоков В) Только оно вам надо? В)
__________________
I never saw a wildthing sorring for itself.
A small bird will drop frozen dead without ever felt sorry for itself.
Pitty вне форума  
Старый 03.05.2006, 13:39   #4
George
Местный
 
Регистрация: 26.04.2006
Сообщений: 413
Вы сказали Спасибо: 113
Поблагодарили 153 раз(а) в 70 сообщениях
Отправить сообщение для George с помощью ICQ
По умолчанию

Вот. Добрался. Лови:

На самом деле TParser не является синтаксическим анализатором, скорее это лексический анализатор, или сканер. Или, другими словами, входной поток признаков (tokens) в ASCII-коде. Вы довольно легко можете использовать эти "признаки" для парсирования выражения, используя простую рекурсию. Сделав это, вы можете произвести разбор вашего математического выражения практически любой сложности. TParser вам поможет, но рекурсивный анализатор придется создавать ручками.
Код:
 ...простой пример, который мы хотим парсировать: (23.34 + 21.21) * 2.92 - 12.21 * sin (180) * -1
Вот пример синтаксического анализатора выражений, наследника TParser, который может разобрать вышеуказанное выражение. Он использует следующие определения для выражений:
Expr ::= Term + Expr | Term - Expr | Term
Term ::= Factor * Term | Factor / Term | Factor
Factor ::= + Item | - Item | Item
Item ::= ( Expr ) | Fn( Expr ) | Number
Fn ::= Sin | Cos
Number ::= floating point literal number (плавающая точка литерала числа)
Далее идет модуль и форма, показывающие как это можно использовать. Вы должны скопировать текст формы в окно редактора Delphi и сохранить как DFM-файл. Мои расчеты вашего выражения привели к результату 130.086 - это правильно? Примечание: TParser имеет ошибку в подпрограмме парсирования плавающего числа. Любое сочетание символов с символами '+' или '-' воспринимается как часть плавающего числа, поскольку 1e+3 корректное выражение. Естественно, это должно быть правильным только в совокупности с символом 'e'. Поэтому вы должны убедиться, что перед символами '+' и '-' имеется хотя бы один пробел, как показано в вашем выражении. Вы можете это исправить (если у вас есть исходный код VCL), редактируя функцию TParser.NextToken.
Вложения
Тип файла: zip TParser.zip (2.2 Кб, 9 просмотров)
__________________
С наилучшими пожеланиями
George

Последний раз редактировалось George; 03.05.2006 в 13:47.
George вне форума  
 


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 10:49. Часовой пояс GMT +3.


Для улучшения работы сайта и его взаимодействия с пользователями мы используем файлы cookie. Продолжая работу с сайтом, Вы разрешаете использование cookie-файлов. Вы всегда можете отключить файлы cookie в настройках Вашего браузера.
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot