关于表达式解析器(100分)

  • 主题发起人 主题发起人 lhl20000
  • 开始时间 开始时间
L

lhl20000

Unregistered / Unconfirmed
GUEST, unregistred user!
我想将字符串
“y = 6E-07x6 - 3E-05x5 + 0.0003x4 + 0.0038x3 - 0.079x2 + 0.4173x - 0.2306”
通过编程,变成DELPHI能识别的公式,然后将X代入数据计算出Y值,请高手指教好方法。
 
留下email,给你个例子
 
http://www.playicq.com/dispdocnew.php?id=10174
 
如果仅仅是
“y = 6E-07x6 - 3E-05x5 + 0.0003x4 + 0.0038x3 - 0.079x2 + 0.4173x - 0.2306”
那好办,给你以下函数.
function Replace(str,s1,s2:string;casesensitive:boolean=False):string;
var
i:integer;
s,t:string;
begin
s:='';
t:=str;
try
repeat
if casesensitive then i:=pos(s1,t) else i:=pos(lowercase(s1),lowercase(t));
if i>0 then
begin
s:=s+Copy(t,1,i-1)+s2;
t:=Copy(t,i+Length(s1),MaxInt);
end
else s:=s+t;
until i<=0;
result:=s;
except
result:='';
// application.MessageBox('1','555');
end;
end;

function Calculate(express:string):string;
var
vscript:variant;
begin
try
vscript:=createoleobject('scriptcontrol');
vscript.language:='javascript';
result:=vscript.eval(express);
except
result:='';
// application.MessageBox('表达式出错!','提示');
end;
end;
 
chnplzh:
这个只是例如,不过形式都一样,都是一元高次多项式。
liuhailong1977@tom.com
 
andy263
我是要程序实现
 
那个程序包含代码 另外源码空间有很多这样的例子
 
chnplzh
如何使用
 
学习一下编译原理,自己动手写一个表达式解析器
 
正解应该是使用LEX和BNF范式,这是通用的词法分析器和语法构造器,可以生成任意复杂的脚本引擎,不过能熟练运用LEX和BNF需要有编译原理的基础知识。delphi下有没有实现我不清楚,不过java有现成的javacc可用,可以先生成java源代码在移植过来。
 
一元高次多项式的这种表达方式:
y = 6E-07x6 - 3E-05x5 + 0.0003x4 + 0.0038x3 - 0.079x2 + 0.4173x - 0.2306
有问题吧,
 
linsb
什么问题?
 
x6,x5,x4...一般理解为是不同的变量,如何表示变量x的幂
 
俺前几天用C 写过一个这样的东东,可扩展自定义的函数及相关的运算。不知道你感不感兴趣。
 
二叉树吧,很多以前的帖子都有这个,搜一下了
 
这应该是个 逆波兰德法,
进行表式解析的算法问题。
查查数据结构的书。
 
有不少控件可以做,如lmd,dream,expression parser 都可以!你自己查查!
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
923
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部