TEvaluator
Delphi 7の JCL クラスに含まれている定義済み関数 (ABS 関数など) を知っている人はいますか?
2 に答える
付属の標準機能はありませんMath.pas
。デフォルトの評価パーサーに実装されているのは、演算子, or
, xor
, and
, not
, mod
, +
, -
, /
, *
, <
, >
, <=
, >=
, =
,div
およびだけです。(ソースの簡単なチェックで見つけたのと同じくらい多く、@ David のコメントに基づいて見逃したものもいくつかあります。)cmp
bor
bxor
band
bnot
shl
shr
関数(Delphi RTL の一部である関数を含む)をエバリュエータに簡単に追加できます。JCL ユニットの 1 つから機能を追加するデモにも示されています。
JCL\examples\common\expreval
デフォルトでフォルダー内にある JCL エバリュエーターの例 (ExprEvalExample.dpr) は、パラメーターとしてaTComboBox.Items
をInit
関数に渡します。これは、このコード (同じルーチン内の関数に与えられます) によって からの関数が取り込まれます。ExprEvalExampleLogic.pas
FuncList
TEasyEvaluator
JclMath.pas
with FuncList do
begin
Add('LogBase10');
Add('LogBase2');
Add('LogBaseN');
Add('ArcCos');
Add('ArcCot');
Add('ArcCsc');
Add('ArcSec');
Add('ArcSin');
Add('ArcTan');
Add('ArcTan2');
Add('Cos');
Add('Cot');
Add('Coversine');
Add('Csc');
Add('Exsecans');
Add('Haversine');
Add('Sec');
Add('Sin');
Add('Tan');
Add('Versine');
Add('ArcCosH');
Add('ArcCotH');
Add('ArcCscH');
Add('ArcSecH');
Add('ArcSinH');
Add('ArcTanH');
Add('CosH');
Add('CotH');
Add('CscH');
Add('SecH');
Add('SinH');
Add('TanH');
end;
これらは、デモ アプリでサポートされている機能です。同様の方法で独自のものを追加できます。
定義済み関数は含まれていません。標準の算術演算子があります: +、-、*、div、および mod。そして、すべての標準的な論理演算子とビット演算子があります。しかし、abs、sin、exp、log などのようなものはありません。それらを自分で配置する必要があります。関数を追加するのは非常に簡単で、評価者がサポートするものを正確に選択できるようにするのは良い設計だと思います。