mirror of
				https://github.com/eledio-devices/thirdparty-tinyexpr.git
				synced 2025-10-31 00:32:38 +01:00 
			
		
		
		
	Added additional example and info.
This commit is contained in:
		
							
								
								
									
										5
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								Makefile
									
									
									
									
									
								
							| @@ -3,7 +3,7 @@ CCFLAGS = -ansi -Wall -Wshadow -O2 | |||||||
| LFLAGS = -lm | LFLAGS = -lm | ||||||
|  |  | ||||||
|  |  | ||||||
| all: test bench example example2 | all: test bench example example2 example3 | ||||||
|  |  | ||||||
|  |  | ||||||
| test: test.o tinyexpr.o | test: test.o tinyexpr.o | ||||||
| @@ -20,6 +20,9 @@ example: example.o tinyexpr.o | |||||||
| example2: example2.o tinyexpr.o | example2: example2.o tinyexpr.o | ||||||
| 	$(CC) $(CCFLAGS) -o $@ $^ $(LFLAGS) | 	$(CC) $(CCFLAGS) -o $@ $^ $(LFLAGS) | ||||||
|  |  | ||||||
|  | example3: example3.o tinyexpr.o | ||||||
|  | 	$(CC) $(CCFLAGS) -o $@ $^ $(LFLAGS) | ||||||
|  |  | ||||||
| .c.o: | .c.o: | ||||||
| 	$(CC) -c $(CCFLAGS) $< -o $@ | 	$(CC) -c $(CCFLAGS) $< -o $@ | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										25
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								README.md
									
									
									
									
									
								
							| @@ -15,6 +15,7 @@ the standard C math functions and runtime binding of variables. | |||||||
| - Simple and fast. | - Simple and fast. | ||||||
| - Implements standard operators precedence. | - Implements standard operators precedence. | ||||||
| - Exposes standard C math functions (sin, sqrt, ln, etc.). | - Exposes standard C math functions (sin, sqrt, ln, etc.). | ||||||
|  | - Can add custom functions and variables easily. | ||||||
| - Can bind variables at eval-time. | - Can bind variables at eval-time. | ||||||
| - Released under the zlib license - free for nearly any use. | - Released under the zlib license - free for nearly any use. | ||||||
| - Easy to use and integrate with your code | - Easy to use and integrate with your code | ||||||
| @@ -168,6 +169,23 @@ This produces the output: | |||||||
|                 5.000000 |                 5.000000 | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ##Binding to Custom Functions | ||||||
|  |  | ||||||
|  | TinyExpr can also call to custom functions implemented in C. Here is a short example: | ||||||
|  |  | ||||||
|  | ```C | ||||||
|  | double my_sum(double a, double b) { | ||||||
|  |     /* Example C function that adds two numbers together. */ | ||||||
|  |     return a + b; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | te_variable vars[] = { | ||||||
|  |     {"mysum", my_sum, TE_FUNCTION2} /* TE_FUNCTION2 used because my_sum takes two arguments. */ | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | te_expr *n = te_compile("mysum(5, 6)", vars, 1, 0); | ||||||
|  |  | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  |  | ||||||
| ##How it works | ##How it works | ||||||
| @@ -219,7 +237,12 @@ TinyExpr parses the following grammar: | |||||||
|     <term>      =    <factor> {("*" | "/" | "%") <factor>} |     <term>      =    <factor> {("*" | "/" | "%") <factor>} | ||||||
|     <factor>    =    <power> {"^" <power>} |     <factor>    =    <power> {"^" <power>} | ||||||
|     <power>     =    {("-" | "+")} <base> |     <power>     =    {("-" | "+")} <base> | ||||||
|     <base>      =    <constant> | <variable> | <function-0> {"(" ")"} | <function-1> <power> | <function-2> "(" <expr> "," <expr> ")" | "(" <list> ")" |     <base>      =    <constant> | ||||||
|  |                    | <variable> | ||||||
|  |                    | <function-0> {"(" ")"} | ||||||
|  |                    | <function-1> <power> | ||||||
|  |                    | <function-X> "(" <expr> {"," <expr>} ")" | ||||||
|  |                    | "(" <list> ")" | ||||||
|  |  | ||||||
| In addition, whitespace between tokens is ignored. | In addition, whitespace between tokens is ignored. | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										35
									
								
								example3.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								example3.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,35 @@ | |||||||
|  | #include "tinyexpr.h" | ||||||
|  | #include <stdio.h> | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /* An example of calling a C function. */ | ||||||
|  | double my_sum(double a, double b) { | ||||||
|  |     printf("Called C function with %f and %f.\n", a, b); | ||||||
|  |     return a + b; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | int main(int argc, char *argv[]) | ||||||
|  | { | ||||||
|  |     te_variable vars[] = { | ||||||
|  |         {"mysum", my_sum, TE_FUNCTION2} | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     const char *expression = "mysum(5, 6)"; | ||||||
|  |     printf("Evaluating:\n\t%s\n", expression); | ||||||
|  |  | ||||||
|  |     int err; | ||||||
|  |     te_expr *n = te_compile(expression, vars, 1, &err); | ||||||
|  |  | ||||||
|  |     if (n) { | ||||||
|  |         const double r = te_eval(n); | ||||||
|  |         printf("Result:\n\t%f\n", r); | ||||||
|  |         te_free(n); | ||||||
|  |     } else { | ||||||
|  |         /* Show the user where the error is at. */ | ||||||
|  |         printf("\t%*s^\nError near here", err-1, ""); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     return 0; | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user