diff --git a/README.md b/README.md index e05f8fc..fa9aeb6 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ TinyExpr logo -#TinyExpr +# TinyExpr TinyExpr is a very small recursive descent parser and evaluation engine for math expressions. It's handy when you want to add the ability to evaluation @@ -12,7 +12,7 @@ math expressions at runtime without adding a bunch of cruft to you project. In addition to the standard math operators and precedence, TinyExpr also supports the standard C math functions and runtime binding of variables. -##Features +## Features - **ANSI C with no dependencies**. - Single source file and header file. @@ -25,12 +25,12 @@ the standard C math functions and runtime binding of variables. - Easy to use and integrate with your code - Thread-safe, provided that your *malloc* is. -##Building +## Building TinyExpr is self-contained in two files: `tinyexpr.c` and `tinyexpr.h`. To use TinyExpr, simply add those two files to your project. -##Short Example +## Short Example Here is a minimal example to evaluate an expression at runtime. @@ -40,7 +40,7 @@ Here is a minimal example to evaluate an expression at runtime. ``` -##Usage +## Usage TinyExpr defines only four functions: @@ -51,7 +51,7 @@ TinyExpr defines only four functions: void te_free(te_expr *expr); ``` -##te_interp +## te_interp ```C double te_interp(const char *expression, int *error); ``` @@ -72,7 +72,7 @@ of the parse error on failure, and set `*error` to 0 on success. double c = te_interp("(5+5", &error); /* Returns NaN, error is set to 4. */ ``` -##te_compile, te_eval, te_free +## te_compile, te_eval, te_free ```C te_expr *te_compile(const char *expression, const te_variable *lookup, int lookup_len, int *error); double te_eval(const te_expr *n); @@ -117,7 +117,7 @@ After you're finished, make sure to call `te_free()`. ``` -##Longer Example +## Longer Example Here is a complete example that will evaluate an expression passed in from the command line. It also does error checking and binds the variables `x` and `y` to *3* and *4*, respectively. @@ -178,7 +178,7 @@ This produces the output: 5.000000 -##Binding to Custom Functions +## Binding to Custom Functions TinyExpr can also call to custom functions implemented in C. Here is a short example: @@ -197,7 +197,7 @@ te_expr *n = te_compile("mysum(5, 6)", vars, 1, 0); ``` -##How it works +## How it works `te_compile()` uses a simple recursive descent parser to compile your expression into a syntax tree. For example, the expression `"sin x + 1/4"` @@ -216,7 +216,7 @@ and return the result of the expression. `te_free()` should always be called when you're done with the compiled expression. -##Speed +## Speed TinyExpr is pretty fast compared to C when the expression is short, when the @@ -237,7 +237,7 @@ Here is some example performance numbers taken from the included -##Grammar +## Grammar TinyExpr parses the following grammar: @@ -262,7 +262,7 @@ notation (e.g. *1e3* for *1000*). A leading zero is not required (e.g. *.5* for *0.5*) -##Functions supported +## Functions supported TinyExpr supports addition (+), subtraction/negation (-), multiplication (\*), division (/), exponentiation (^) and modulus (%) with the normal operator @@ -278,7 +278,7 @@ Also, the following constants are available: - `pi`, `e` -##Compile-time options +## Compile-time options By default, TinyExpr does exponentation from left to right. For example: @@ -300,7 +300,7 @@ That will match how many scripting languages do it (e.g. Python, Ruby). Also, if you'd like `log` to default to the natural log instead of `log10`, then you can define `TE_NAT_LOG`. -##Hints +## Hints - All functions/types start with the letters *te*.