views:

42

answers:

2

Hi,

I'm creating a piece of software (written in C#, will be a windows application) and I ran into this problem-

I've got a set of variables, and I need to allow the user to define a wide range of mathematical functions on those variables.

But my users don't necessarily have to have any prior knowledge about programming.

The options I've considered are:

  • Create some sort of GUI for defining the mathematical "functions". But that is very limiting.
  • Implement a very simple embedded language, that will offer flexibility while remaining relatively easy to understand. I looked at Lua, but the problem with that is that you pretty much need to have prior knowledge in programming. I was thinking about something more readable (somewhat similar to SQL), for example "assign 3 to X;"

Other ideas are welcome.

I'm basically looking for the best way to go here, under the assumption that my users don't have any knowledge in programming.

However, note that this is not the main feature of my software, so I'm assuming that if a user wants/needs to use this feature, he will take the time to look at the manual for a few minutes and learn how to do so, as long as it's not too complicated.

Thanks, Malki :)

+4  A: 

What you want is a domain specific language. I see you've tried Lua and didn't find that acceptable--I'll assume that most pre-built scripting languages are out then.

Depending on your expected function complexity, I would recommend that you give a shot at implementing a small recursive-descent parser so that you can exactly specify your language. This way you can realize something like:

assign 3 to X
show sin(X * 5)

If this is a bit beyond what you're willing to do, you can get some parsing assistance from a library such as Irony; this will let you focus on using the abstract syntax tree rather than playing with tokenizing/lexing for some time.

If you want, you can even look at FLEE, which will parse and evaluate some pretty complex expressions right out of the gate.

Ron Warholic
Thanks a million! I think I'll go with Irony :)
Malki
Remember that Irony is considered alpha code so that may bring some issues with it. I remember I had some difficulties getting some specialized grammars to work without significantly modifying the existing codebase. I've also used ANTLR on .NET (as suggested by pm100) and it is obviously more mature but requires specialized tools and knowledge of their grammar format (as opposed to Irony which uses C# code).
Ron Warholic
+2  A: 

ANTLR is a greate parser if you want to make your own language

pm100