Name Date Size #Lines LOC

..--

patches/H25-Apr-2025-1615

.clang-formatH A D25-Apr-202540 32

LICENSEH A D25-Apr-20251 KiB2217

README.chromiumH A D25-Apr-2025449 1813

README.mdH A D25-Apr-20255.5 KiB264197

ceval.hH A D25-Apr-202537.4 KiB1,073955

package.jsonH A D25-Apr-2025600 2625

README.chromium

1Name: ceval
2URL: https://github.com/erstan/ceval-single-header
3Version: 1ed80ae78ba7bef1744b1ccdffc6c6802eeec8fa
4Revision: 1ed80ae78ba7bef1744b1ccdffc6c6802eeec8fa
5License: MIT
6License File: LICENSE
7Security Critical: no
8Shipped: no
9
10Description:
11A C/C++ header for parsing and evaluation of arithmetic expressions.
12
13Description of the patches:
14
15- 0001-remove-sprintf.patch
16
17  This patch removes uses of sprintf() and replaces them with snprintf().
18

README.md

1# ceval
2A C/C++ header for parsing and evaluation of arithmetic expressions.
3
4[README file is almost identical to that of the <a href="https://github.com/erstan/ceval#readme">ceval</a> library]
5
6## Functions accessibe from main()
7<table>
8<thead><th>Function</th><th>Argument(s)</th><th>Return Value</th></thead>
9<tbody>
10 <tr>
11  <td><code>ceval_result()</code></td>
12  <td>A mathematical expression in the form of a character array or a CPP string</td>
13  <td>The result of the expression as a floating point number</td>
14</tr>
15<tr>
16  <td><code>ceval_tree()</code></td>
17  <td>A mathematical expression in the form of a character array or a CPP string</td>
18  <td>The function prints the parse tree with each node properly indented depending on it's location in the tree structure</td>
19</tr>
20</tbody>
21</table>
22
23## Supported expressions
24Any valid combination of the following operators and functions, with floating point numbers as operands can be parsed by <b>ceval</b>. Parentheses can be used to override the default operator precedences.
25
26* Arithematic operators
27
28`+` (addition), `-` (subtraction), `*` (multiplication), `/` (division), `%` (modulo), `**` (exponentiation), `//` (quotient)
29* Relational operators
30
31`==` (equal), `!=` (not equal), `<` (strictly less), `>` (strictly greater), `<=` (less or equal), `>=` (greater or equal) to compare the results of two expressions
32
33* Single-argument functions
34
35`exp()`, `sqrt()`, `cbrt()`, `sin()`, `cos()`, `tan()`, `asin()`, `acos()`, `atan()`, `sinh()`, `cosh()`, `tanh()`, `abs()`, `ceil()`, `floor()`, `log10()`, `ln()`, `deg2rad()`, `rad2deg()`, `signum()`, `int()`, `frac()`, `fact()`
36
37* Two-argument functions
38
39`pow()`, `atan2()`, `gcd()`, `hcf()`, `lcm()`, `log()` (generalized log(b, x) to any base `b`)
40
41* Pre-defined math constants
42
43`_pi`, `_e`
44
45...pre-defined constants are prefixed with an underscore
46
47* Logical operators
48
49`&&`, `||` and `!`
50
51* Bitwise operators
52
53`&`, `|`, `^`, `<<`, `>>`, `~`
54
55* Other operators
56
57  * `,` (Comma operator)
58  Comma operator returns the result of it's rightmost operand
59  Ex: `2,3` would give `3`; `4,3,0` would be equal to `0`; and `cos(_pi/2,_pi/3,_pi)` would return `cos(_pi)` i.e, `-1`
60  * `e` (e-operator for scientific notation)
61  Using the binary `e` operator, we can use scientific notation in our arithmetic expressions
62  Ex: `0.0314` could be written as `3.14e-2`; `1230000` could be subsituted by `1.23e6`
63
64## Usage
65Include the ceval library using the `#include "PATH_TO_CEVAL.H"` directive your C/C++ project.
66
67The code snippet given below is a console based interpreter that interactively takes in math expressions from stdin, and prints out their parse trees and results.
68
69```
70//lang=c
71#include<stdio.h>
72#include<stdlib.h>
73
74#include "ceval.h"
75
76int main(int argc, char ** argv) {
77  char expr[100];
78  while (1) {
79    printf("In = ");
80    fgets(expr, 100, stdin);
81    if (!strcmp(expr, "exit\n")) {
82      break;
83    } else if (!strcmp(expr, "clear\n")) {
84      system("clear");
85      continue;
86    } else {
87      ceval_tree(expr);
88      printf("\nOut = %f\n\n", ceval_result(expr));
89    }
90  }
91  return 0;
92}
93```
94
95## Test Run
96```
97In = 3*7**2
98                2
99        **
100                7
101*
102        3
103
104Out = 147.000000
105
106
107In = (3.2+2.8)/2
108        2
109/
110                2.80
111        +
112                3.20
113
114Out = 3.000000
115
116
117In = _e**_pi>_pi**_e
118                2.72
119        **
120                3.14
121>
122                3.14
123        **
124                2.72
125
126Out = 1.000000
127
128
129In = 5.4%2
130        2
131%
132        5.40
133
134Out = 1.400000
135
136
137In = 5.4//2
138        2
139//
140        5.40
141
142Out = 2.000000
143
144
145In = 2*2.0+1.4
146        1.40
147+
148                2
149        *
150                2
151
152Out = 5.400000
153
154
155In = (5/4+3*-5)+(sin(_pi))**2+(cos(_pi))**2
156                2
157        **
158                        3.14
159                cos
160+
161                        2
162                **
163                                3.14
164                        sin
165        +
166                                        5
167                                -
168                        *
169                                3
170                +
171                                4
172                        /
173                                5
174
175Out = -12.750000
176
177
178In = 3,4,5,6
179        6
180,
181                5
182        ,
183                        4
184                ,
185                        3
186
187Out = 6.000000
188
189
190In = tanh(2/3)==(sinh(2/3)/cosh(2/3))
191                                3
192                        /
193                                2
194                cosh
195        /
196                                3
197                        /
198                                2
199                sinh
200==
201                        3
202                /
203                        2
204        tanh
205
206Out = 1.000000
207
208
209In = (2+3/3+(3+9.7))
210                9.70
211        +
212                3
213+
214                        3
215                /
216                        3
217        +
218                2
219
220Out = 15.700000
221
222
223In = sin(_pi/2)+cos(_pi/2)+tan(_pi/2)
224                        2
225                /
226                        3.14
227        tan
228+
229                                2
230                        /
231                                3.14
232                cos
233        +
234                                2
235                        /
236                                3.14
237                sin
238
239[ceval]: tan() is not defined for odd-integral multiples of _pi/2
240
241Out = nan
242
243
244In = asin(2)
245        2
246asin
247
248[ceval]: Numerical argument out of domain
249
250Out = nan
251
252
253In = exit
254... Program finished with exit code 0
255
256```
257## Note
258When the `ceval.h` file is included in a C-program, you might require the `-lm` flag to link `math.h`
259
260```shell
261gcc file.c -lm
262```
263
264