Форум: "Основная";
Текущий архив: 2004.10.17;
Скачать: [xml.tar.bz2];
ВнизТекстовый интерпритатор Найти похожие ветки
← →
Kolan © (2004-09-30 20:15) [0]Здравствуйте,
Не раскажите где взять такой компонент или хотя бы как его написать. Задача - сделать вычисления по заданной ф-ции.
← →
Babay © (2004-10-01 07:37) [1]У меня есть модуль для вычисления выражений заданных в строку типа sin(x)*cos(x^y)+exp(cos(x)) если что могу выслать через асю 274945578. Незабудь представится, а то в игнор....
← →
Ozone © (2004-10-01 08:45) [2]Смотри в сторону обратной польской нотации
← →
Erik1 © (2004-10-01 10:57) [3]Вобщето можно небольшой нитерпритатор математических выражений поискать. Их довольно монго, есть и Free.
← →
Amoeba © (2004-10-01 11:06) [4]Например, есть (некомпонентный класс) в RxLib/JVCL
← →
Kolan © (2004-10-01 13:58) [5]
> Erik1 © (01.10.04 10:57) [3]
> Вобщето можно небольшой нитерпритатор математических выражений
> поискать. Их довольно монго, есть и Free.
подскажи где
> Babay © (01.10.04 07:37) [1]
> У меня есть модуль для вычисления выражений заданных в строку
> типа sin(x)*cos(x^y)+exp(cos(x)) если что могу выслать через
> асю 274945578. Незабудь представится, а то в игнор....
Скинь на мыло kolan_nick@mail.ru
Благодарю
← →
TUser © (2004-10-01 14:04) [6]www.torry.net
← →
Ega23 © (2004-10-01 14:08) [7]А я сам писал, в своё время. Алгоритмы - в сети сколько угодно, хоть залейся. А программа была - построение поверхностей второго порядка.
← →
Kolan © (2004-10-01 14:41) [8]Скажите как это называется правильно. Я сюда не постил ебы сам нашел. Вот такое мне и надо считать sin(x)*cos(x^y)+exp(cos(x))
← →
Ega23 © (2004-10-01 14:55) [9]Поищи на Яндексе про Обратную Польскую Запись. Почитай внимательно. Разберись. Потом поищи алгоритм интерпритации математических выражений. Разберись.
После этого написать свой парсер у тебя не составит никакого труда.
← →
Amoeba © (2004-10-01 14:55) [10]Называются такие штуки математическими парсерами
← →
Kolan © (2004-10-01 15:32) [11]Обратную Польскую Запись я знаю в "Школе" учил. Знаю как реализовать (в теории + есть текс) с помошью стека или дерева (не помнь уже как там делали). Но то для чего это нужно не соответствует затраченным силам для написания алгоритма.
P.S. Глянте мою тему про установку (Delphi + новая компонента = НЕРАБОТАЕТ delphi) чё-то не пойму где глюк?
← →
Mystic © (2004-10-01 15:37) [12]Если это интерпретатор математических выражений, то я бы скачал на torry YACC+LEX, после чего откомпилировал бы следующий исходник:
Expr.lex
(* Lexical analyzer for the sample Yacc program in Expr.y. *)
L [A-Za-z]
D [0-9]
%%
var result : integer;
{D}+(\.{D}+)?([Ee][+-]?{D}+)? begin
val(yytext, yylval.yyReal, result);
if result=0 then
return(NUM)
else
return(ILLEGAL)
end;
{L} begin
yylval.yyInteger := ord(upCase(yytext[1]))-
ord("A")+1;
return(ID)
end;
" " ;
. |
\n returnc(yytext[1]);
":=" return(ASSIGN);
Expr.y/* Sample Yacc grammar for a simple desktop calculator; derived from a
grammar in Aho et al: Compilers. Principles, Techniques and Tools (Sect.
4.9).
Lexical analyzer is in Lex program ExprLex.l.
To compile parser and lexical analyzer, issue the following commands:
yacc expr
lex exprlex
tpc expr
Description: This program reads simple arithmetic expressions, constructed
with real constants, operators +, -, *, /, unary - and parentheses
(operators have their usual precedence, unary minus is highest), from
standard input (one per line) and prints the result on standard output.
Variables are denoted by a single letter (no distinction between upper and
lowercase letters); they are assigned values through an assignment of the
form <var>=<expr>.
The program is terminated by entering an empty line. */
%{
{$APPTYPE CONSOLE}
program Expr;
uses YaccLib, LexLib, SysUtils, Classes;
var x : array [1..26] of Real;
procedure yydebugoutput(msg : string);
begin
WriteLn(Format("yacc parser error: %s, yystate=%d", [msg, yystate]));
end;
%}
%token <Real> NUM /* constants */
%token <Integer> ID /* variables */
%type <Real> expr /* expressions */
%left "+" "-" /* operators */
%left "*" "/"
%right UMINUS
%token ILLEGAL /* illegal token */
%token ASSIGN /* assign */
%%
input : /* empty */
| input "\n" { yyaccept; }
| input expr "\n" { writeln($2:10:2); }
| input ID ASSIGN expr "\n" { x[$2] := $4; writeln($4:10:2); }
| error "\n" { yyerrok; }
;
expr : expr "+" expr { $$ := $1 + $3; }
| expr "-" expr { $$ := $1 - $3; }
| expr "*" expr { $$ := $1 * $3; }
| expr "/" expr { $$ := $1 / $3; }
| "(" expr ")" { $$ := $2; }
| "-" expr { $$ := -$2; }
%prec UMINUS
| NUM { $$ := $1; }
| ID { $$ := x[$1]; }
;
%%
{$I ExprLex}
var i : Integer;
begin
for i := 1 to 26 do x[i] := 0.0;
yyinput := TFileStream.Create(ParamStr(1), fmOpenRead);
try
if yyparse=0 then { done };
finally
FreeAndNil(yyinput);
end;
ReadLn;
end.
← →
TUser © (2004-10-01 15:39) [13]Могу ошибаться, но кажется в jedi есть парсер. А ваще - парсеров по сети полно, это правда.
И не так уже это сложно - надо только начать.
← →
jack128 © (2004-10-01 19:43) [14]а ScripControl не пойдет??
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.10.17;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.037 c