Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.031 c
6-1091802512
Wolfram
2004-08-06 18:28
2004.10.17
Использование ICS


14-1096488191
Ломброзо
2004-09-30 00:03
2004.10.17
Объясните, пожалуйста


14-1096297672
Копир
2004-09-27 19:07
2004.10.17
- Да чего тебя жалеть-то? - крикнул хозяин, очутившийся опять


1-1096808711
M-Alex
2004-10-03 17:05
2004.10.17
Почему это не работает?


14-1095846283
080D:07BBh
2004-09-22 13:44
2004.10.17
Предложение.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский