Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsFree MagazinesWhite PapersSubmit Content
Discussion GroupsASP.NETWindows FormsLanguages.NET FrameworkVisual Studio.NET
Articles.NET FrameworkASP.NETToolsWindows Forms
.NET DirectoryOpen Source ProjectsUser GroupsWeb Resources
Related Topics
Visual Basic 6SQL ServerMS AccessOther DB ProductsMS Server ProductsMore Topics ...

.NET Forum / .NET Framework / New Users / June 2006

Tip: Looking for answers? Try searching our database.

Execute Arbitrary Math Formulas

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
rob - 19 Jun 2006 16:38 GMT
I have the following scenario. A user requests some math calculations
from a server. The data and a library of basic formulas reside on the
server. Now the user should be able to create more complex formulas
based on the basic built in formulas as well as other complex formulas
that the user created himself. These formulas will be either stored on
the server or client and will be applied to the data on the server.
Some of the formulas will be used only once (if they don't work as
expected) wheras others might get used on a frequent basis. What is the
best way to approach this problem?

Thanks
Unconnected - 19 Jun 2006 17:06 GMT
Don't know if this of any use.

http://www.codeguru.com/csharp/csharp/cs_misc/mathematics/article.php/c4245/

> I have the following scenario. A user requests some math calculations
> from a server. The data and a library of basic formulas reside on the
[quoted text clipped - 7 lines]
>
> Thanks
Ignacio Machin ( .NET/ C# MVP ) - 19 Jun 2006 18:39 GMT
Hi,

Depends, where the logic for evaluate the formulas reside? if you are going
to allow arbitrary formulas you need a formula evaluator. Depending of the
framework you are using you can evaluate them in the server or in the
client.

IMO you should provide more details about your environment.

Signature

--
Ignacio Machin,
ignacio.machin AT dot.state.fl.us
Florida Department Of Transportation

>I have the following scenario. A user requests some math calculations
> from a server. The data and a library of basic formulas reside on the
[quoted text clipped - 7 lines]
>
> Thanks
Volker Hetzer - 19 Jun 2006 19:40 GMT
rob schrieb:
> I have the following scenario. A user requests some math calculations
> from a server. The data and a library of basic formulas reside on the
[quoted text clipped - 5 lines]
> expected) wheras others might get used on a frequent basis. What is the
> best way to approach this problem?
Write a parser. Dunno if yacc/lex are available for visual studio. If not,
get a book about compiler construction and do a recursive parser.

Lots of Greetings!
Volker
Signature

For email replies, please substitute the obvious.

Brian Gideon - 19 Jun 2006 20:31 GMT
ANTLR <http://www.antlr.org/> is compiler compiler that generates C#
code.

> Write a parser. Dunno if yacc/lex are available for visual studio. If not,
> get a book about compiler construction and do a recursive parser.
>
> Lots of Greetings!
> Volker
rob - 20 Jun 2006 15:27 GMT
What is your opinion about on-the-fly/runtime compiling as another
solution and how would this be approched.

Thanks
Brian Gideon - 20 Jun 2006 15:49 GMT
Rob,

If your talking about using reflection then that would definitely be
the easiest.  However, the security vulnerability you open up could be
huge.  The compiler compiler option is probably the best overall, but
there is a huge learning curve.  And of course you could always whip up
your own evaluator.  Writing your own isn't terribly difficult.  It
consists of 3 basic steps:  First, tokenize the input string.  Then
perform an infix to postfix conversion.  That gets rid of paranthesis
and cumbersome operator precedence rules.  Finally, evaluate by popping
operands of a stack and pushing the result until all operators are
consumed.

Brian

> What is your opinion about on-the-fly/runtime compiling as another
> solution and how would this be approched.
>
> Thanks
Volker Hetzer - 20 Jun 2006 15:58 GMT
rob schrieb:
> What is your opinion about on-the-fly/runtime compiling as another
> solution and how would this be approched.
There is no "eval" statement there, probably for security reasons.
Also, the JIT compiler expects some IL code as far as I know, not source
code.
You *could* create a little C# program and compile it. Requires Visual
studio on the server (eurgh!!!) Won't work for more than very infrequent
use and creates a huge workload on the server.

You could install perl or tcl on the server. They *do* have
an eval statement. Write a small server that listens on a port,
gets the expression string, evaluates it and returns the result.

But really, an expression parser isn't that hard to do. A simple one
was a (very small) part of my diploma thesis and every CS student
does several during the course of his studies.

Lots of Greetings!
Volker
Signature

For email replies, please substitute the obvious.

rob - 21 Jun 2006 00:54 GMT
> rob schrieb:
> > What is your opinion about on-the-fly/runtime compiling as another
[quoted text clipped - 18 lines]
> --
> For email replies, please substitute the obvious.

Unfortunatelly (for this particular problem) I have no CS degree
(though one from a different field). Well, I guess I'll have to learn
how to write a parser then. I just wonder if a parser isn't quite
inefficient. I need to repeate the calculation on hundreds of data
points. The first two steps of the parser probably would have to be
done only once but the last step seems still quite costly. But it seems
short of doing compilation at run time there isn't much else that can
be done.
Fred Mellender - 21 Jun 2006 09:43 GMT
You can get a good start on your parser, in C# V2, by consulting
http://www.frontiernet.net/~fredm/dps/Contents.htm , Chapter 3.  The sample
parser will parse simple arithmetic expressions and can be expanded fairly
easily.  You will have to write a lexical analyzer, but this is easily done
by using Regex.

>> rob schrieb:
>> > What is your opinion about on-the-fly/runtime compiling as another
[quoted text clipped - 27 lines]
> short of doing compilation at run time there isn't much else that can
> be done.
Ben Voigt - 19 Jun 2006 19:52 GMT
>I have the following scenario. A user requests some math calculations
> from a server. The data and a library of basic formulas reside on the
[quoted text clipped - 5 lines]
> expected) wheras others might get used on a frequent basis. What is the
> best way to approach this problem?

Sounds like SQL server for the data, predefined formulas as stored
procedures written in .NET, and user formulas as queries, possibly with
Javascript.NET postprocessing.  This would permit compiling the queries for
repeated use.

> Thanks
Tim Van Wassenhove - 19 Jun 2006 23:20 GMT
["Followup-To:" header set to microsoft.public.dotnet.framework.]
> I have the following scenario. A user requests some math calculations
> from a server. The data and a library of basic formulas reside on the
[quoted text clipped - 5 lines]
> expected) wheras others might get used on a frequent basis. What is the
> best way to approach this problem?

As already mentionned, store the 'command string' and evaluate it..
http://en.wikipedia.org/wiki/Reverse_polish_notation can be a good
start...

Signature

Met vriendelijke groeten,
Tim Van Wassenhove <http://timvw.madoka.be>


Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.