Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.17;
Скачать: CL | DM;

Вниз

Текстовый интерпритатор   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.057 c
4-1095292610
Samowar
2004-09-16 03:56
2004.10.17
Процесс в памяти


4-1094546471
MetalFan
2004-09-07 12:41
2004.10.17
заводской номер CD/Floppy


3-1095328408
Bolat
2004-09-16 13:53
2004.10.17
Взять значение поля с другой таблицы


1-1096541739
Алексей
2004-09-30 14:55
2004.10.17
Дата последней модификации файла


6-1091730361
Alexis
2004-08-05 22:26
2004.10.17
Проблема с определением IP компов LAN a