Current Version: 1.0.0.0
CS-MIC
is
a .NET library written in C# designed to give developers easy access to
expression parsing.
For many developers, there is no need to involve complicated settings
and formats. With few exposed methods and objects,
CS-MIC
makes basic
expression solving as simple as possible with as little logic required
from developers as possible. In fact, one can pull a value with only
one line of code.
Please feel free to
review, use, and edit the code here in the
repository.
Additionally,
you can download the DLL for use in your own projects
here.
Do you use CS-MIC? Let us know!
If
you would like your own project to be listed on this site as
incorporating CS-MIC, please send an
email
to the project administrator!
News:
-
October 8th, 2010
-
Version 1.0 has been released. This version is extremely capable and we look forward to any success stories that
you would care to share. Has CS-MIC helped your project in some way? Plese let us know!
-
May 2nd, 2010
-
Big news again! CS-MIC has been completely
overhauled. CS-MIC now works with a scanner/parser generated by
the Coco/R compiler compiler. Two parsers are used, one for per
line statements and one for executing scripts. The use of a
compiler compiler has been a big help in standardizing parsing.
Although the statement count for the project as a whole has doubled,
the speed with which the parsers run is amazingly faster than it was
when regular expressions were used to parse input.
-
Syntax has remained almost exactly backward compatible.
The only syntax that has changed is in the scripting language is the for
loop to be more in line with c syntax, in that a for loop takes an
initial statement, a condition for continued execution and a statement
to be executed at the end of each iteration. Conditional statements now
support an optional else
block. Details can be found here.
-
Automated testing has been added to this release using the
Microsoft Visual Studio testing framework. The test class has
been customized with some methods that can make testing specific kinds
of expressions easier. Feel free to add valid tests.
-
This is a strong release. If there are no problems
discovered/reported with this release before July 9th, 2010
the 1.0 version of
CS-MIC will be officially released.
-
December 17th, 2009
-
Computation
is now handled using regular expressions. This is a major redesign of
the core implementation for CS-MIC. After testing, CS-MIC seems to be
up and ready to go, but if you should experience any funkiness in input
/ output, please report it. We're working hard to make sure that you
can parse your input quickly and reliably, but we need your help to
keep all the bugs out!
-
June 5th, 2009
-
CS-MIC
has a brand new function system. The syntax remains the same, but it is
now extendable. There are two methods for exending the capability of
the interpreter: coded and interpreted functions. There is a new
interface, ICodedFunction,
which gives the interpreter the information needed to execute a new
function with a developer designed code block. There is also a new
class available for creating interpreted functions. The macro builder
is capable of creating these interpreted functions at any point inside
a script using the function(
string
name, params decimal[] arguments)
function followed by a code block.
The last value to be computed will be the return value of the function.
-
May
13th, 2009
-
If you use CS-MIC, please vote
for us in the Community Choice Awards!
-
April
15th, 2009
-
After
a brief pause, CS-MIC now has binary and hexadecimal conversion built
in. Binary numbers are succeeded by the token 'B' and hexadecimal
numbers are preceded by '0x'. Both are non case sensative. Binary and
hexadecimal numbers can be used in combination with any other number.
Go ahead and try it out!
-
January 16th,
2009
-
CS-MIC
needs your help! In order to maintain a higher degree of accuracy,
CS-MIC will undergo a stress test before each new release. This stress
test will be designed to ensure that computation time remains
reasonable compared to expression length and that all computations are
correct. This is where you come in. Please send in
expressions with their confirmed answer to have them included in the
stress test. This will improve the quality of CS-MIC for everyone!
-
January
12th, 2009
-
Happy
New Year
from CS-MIC!
This new file release for the new year fixes many bugs. The expression
node will no longer try to reverse the left hand side of the equation
twice. This would cause a nasty problem causing calculation time to
grow almost exponentiallyas the length of the equation grows linearly.
Another critical bug in the EnsureOrderOfOperations function has also
been fixed. This fix will allow for more accuracy, and also allow you
to pass expressions into functions. The binary(
int
expression)
function
has been removed since it caused problems in further calculations.
Instead, a new Binary property has been added that returns the result,
cast as an int, as its binary equivalent string.
-
December
23rd, 2008
-
Fixed
a few critical bugs in the basic expression parsing. Sending numbers
larger than that allowed will no longer cause CS-MIC to freeze and
eventually crash. Also added the capability to use block and line
comments in the macro builder.
The control now keeps a record of the last execution time for easy
reference. The message of the calculation has been separated into a new
property.
-
December 4th, 2008
-
A
new page has been added to track the complexity
of CS-MIC.
The freeware program SourceMonitor
was used.
-
December 3rd, 2008
-
The
site here has been updated quite a bit lately, and a help section has
been added. Both an online
and compiled
version have been compiled. The compiled version is the same as is
commonly in the file releases. The online help will be updated as
development progresses and may reflect a newer version than is
available for download.
-
December
2nd, 2008
-
Added a new formatting
function: precision(
double
expression, int
expression).
I also updated some of the formatting in this site. Function notations
now indicates what type of value will be extracted from the argument.
-
November
6th, 2008
-
Fixed
a bug in the conditional testing that would return a false 'False' if
two expressions were compared. Four new functions have been
added: log(
double
expression1, double
expression2),sqrt(
double
expression), abs(
double
expression)
and exp(
double
expression).
More can be found about what they do in the functions
section. A Mod function has also been added for all the
computer scientists out there.
-
October
2nd, 2008
-
Restructured the expression
node and input interpreter objects. Expressions
are now parsed in reverse, which means that expressions are now solved
in a left to right order (this was a major bug in the previous
versions). The input interpreter will now follow the PEMDAS order of
operations.
-
September 26th, 2008
-
Added
a 'say' function to the MacroBuilder to add string values to the output
list.
-
September 20th, 2008
-
Added
scripting functionality. A breakdown on the syntax rules can be found here. Please be aware
there are known bugs with executing code blocks after a previous code
block has been executed.
Current
Features
-
Breaks down
input into an equation tree, according to a given order of operations.
-
Stores
numeric values as variables.
-
Stores dynamic
equations as variables.
-
Supports several basic math
functions.
-
Supports basic scripting.
Documentation
Metrics
A complexity
report has been generated by
SourceMonitor.
The analysis file can be downloaded
here.
Future
Features / Revisions
-
Additional
built-in functions.
-
Quicker execution time as
expression length grows.
-
Want
a feature added, but don't see it here? Request
it.
Please keep in mind that this is
just a preliminary list.
Bugs
If
you find a bug with this library, please report
it.
Joining
the Team
Any
help you would like to provide would be greatly appriciated. If you
would like to volunteer as a developer, or have any further questions,
feel free to contact the project administrator
here.
I would like to thank
SourceForge.net for hosting this project.