@flomsstaar/expression-tree 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/README.md +5 -7
  2. package/package.json +15 -13
  3. package/build/example.d.ts +0 -1
  4. package/build/example.js +0 -18
  5. package/build/src/index.d.ts +0 -1
  6. package/build/src/index.js +0 -1
  7. package/build/tests/expression_cutter.test.d.ts +0 -1
  8. package/build/tests/expression_cutter.test.js +0 -9
  9. package/build/tests/expression_evaluator.test.d.ts +0 -1
  10. package/build/tests/expression_evaluator.test.js +0 -110
  11. package/build/tests/expression_parser.test.d.ts +0 -1
  12. package/build/tests/expression_parser.test.js +0 -44
  13. package/build/tests/expression_tree.test.d.ts +0 -1
  14. package/build/tests/expression_tree.test.js +0 -12
  15. package/build/tests/inputs/expression_cutter_input.d.ts +0 -1
  16. package/build/tests/inputs/expression_cutter_input.js +0 -230
  17. package/build/tests/inputs/expression_parser_input.d.ts +0 -2
  18. package/build/tests/inputs/expression_parser_input.js +0 -197
  19. package/build/tests/inputs/expression_tree_input.d.ts +0 -1
  20. package/build/tests/inputs/expression_tree_input.js +0 -44
  21. package/build/tests/number_node.test.d.ts +0 -1
  22. package/build/tests/number_node.test.js +0 -16
  23. package/build/tests/render_expression.test.d.ts +0 -1
  24. package/build/tests/render_expression.test.js +0 -85
  25. package/build/vitest.config.d.ts +0 -2
  26. package/build/vitest.config.js +0 -10
  27. package/src/enums/binary_node_operator.ts +0 -7
  28. package/src/enums/node_type.ts +0 -6
  29. package/src/enums/unary_node_operator.ts +0 -5
  30. package/src/errors/division_by_zero_error.ts +0 -6
  31. package/src/errors/invalid_expression_error.ts +0 -6
  32. package/src/errors/invalid_number_error.ts +0 -6
  33. package/src/errors/invalid_square_root_error.ts +0 -6
  34. package/src/errors/missing_parenthese_error.ts +0 -6
  35. package/src/errors/unknown_binary_operator_error.ts +0 -6
  36. package/src/errors/unknown_node_type_error.ts +0 -6
  37. package/src/errors/unknown_unary_operator_error.ts +0 -6
  38. package/src/expression_cutter.ts +0 -9
  39. package/src/expression_evaluator.ts +0 -76
  40. package/src/expression_parser.ts +0 -117
  41. package/src/expression_tree.ts +0 -19
  42. package/src/models/base_node.ts +0 -5
  43. package/src/models/binary_node.ts +0 -13
  44. package/src/models/number_node.ts +0 -12
  45. package/src/models/unary_node.ts +0 -12
  46. package/src/render_expression.ts +0 -57
@@ -1,19 +0,0 @@
1
- import { ExpressionCutter } from './expression_cutter.js'
2
- import { ExpressionParser } from './expression_parser.js'
3
- import { ExpressionEvaluator } from './expression_evaluator.js'
4
-
5
- export class ExpressionTree {
6
- constructor(
7
- protected cutter = new ExpressionCutter(),
8
- protected parser = new ExpressionParser(),
9
- protected evaluator = new ExpressionEvaluator()
10
- ) {}
11
-
12
- evaluate(expression: string): number {
13
- const cutExpression = this.cutter.cut(expression)
14
-
15
- const baseNode = this.parser.parse(cutExpression)
16
-
17
- return this.evaluator.evaluate(baseNode)
18
- }
19
- }
@@ -1,5 +0,0 @@
1
- import type { NodeType } from '../enums/node_type.js'
2
-
3
- export abstract class BaseNode {
4
- protected constructor(public readonly type: NodeType) {}
5
- }
@@ -1,13 +0,0 @@
1
- import { BaseNode } from './base_node.js'
2
- import { BinaryNodeOperator } from '../enums/binary_node_operator.js'
3
- import { NodeType } from '../enums/node_type.js'
4
-
5
- export class BinaryNode extends BaseNode {
6
- constructor(
7
- public operator: BinaryNodeOperator,
8
- public left: BaseNode,
9
- public right: BaseNode
10
- ) {
11
- super(NodeType.BINARY)
12
- }
13
- }
@@ -1,12 +0,0 @@
1
- import { BaseNode } from './base_node.js'
2
- import { NodeType } from '../enums/node_type.js'
3
-
4
- export class NumberNode extends BaseNode {
5
- constructor(public readonly value: number) {
6
- super(NodeType.NUMBER)
7
- }
8
-
9
- toString(): string {
10
- return this.value.toString()
11
- }
12
- }
@@ -1,12 +0,0 @@
1
- import { BaseNode } from './base_node.js'
2
- import type { UnaryNodeOperator } from '../enums/unary_node_operator.js'
3
- import { NodeType } from '../enums/node_type.js'
4
-
5
- export class UnaryNode extends BaseNode {
6
- constructor(
7
- public operator: UnaryNodeOperator,
8
- public value: BaseNode
9
- ) {
10
- super(NodeType.UNARY)
11
- }
12
- }
@@ -1,57 +0,0 @@
1
- import type { BaseNode } from './models/base_node.js'
2
- import { NumberNode } from './models/number_node.js'
3
- import { BinaryNode } from './models/binary_node.js'
4
- import { BinaryNodeOperator } from './enums/binary_node_operator.js'
5
- import { UnknownBinaryOperatorError } from './errors/unknown_binary_operator_error.js'
6
- import { UnaryNode } from './models/unary_node.js'
7
- import { UnaryNodeOperator } from './enums/unary_node_operator.js'
8
- import { UnknownUnaryOperatorError } from './errors/unknown_unary_operator_error.js'
9
- import { UnknownNodeTypeError } from './errors/unknown_node_type_error.js'
10
-
11
- export function renderExpression(node: BaseNode): string {
12
- if (node instanceof BinaryNode) {
13
- const leftNode = renderExpression(node.left)
14
- const rightNode = renderExpression(node.right)
15
- const operator = {
16
- [BinaryNodeOperator.SUM]: '+',
17
- [BinaryNodeOperator.SUBTRACT]: '-',
18
- [BinaryNodeOperator.MULTIPLY]: '*',
19
- [BinaryNodeOperator.DIVIDE]: '/',
20
- [BinaryNodeOperator.POWER]: '^',
21
- }[node.operator]
22
-
23
- if (!operator) {
24
- throw new UnknownBinaryOperatorError(node.operator)
25
- }
26
-
27
- return `${leftNode} ${operator} ${rightNode}`
28
- } else if (node instanceof UnaryNode) {
29
- switch (node.operator) {
30
- case UnaryNodeOperator.NEGATE: {
31
- if (node.value instanceof NumberNode && node.value.value === 0) {
32
- return '0'
33
- } else if (node.value instanceof BinaryNode) {
34
- const valueNode = renderExpression(node.value)
35
- return `-(${valueNode})`
36
- }
37
-
38
- const valueNode = renderExpression(node.value)
39
- return `-${valueNode}`
40
- }
41
- case UnaryNodeOperator.ABSOLUTE: {
42
- const valueNode = renderExpression(node.value)
43
- return `abs(${valueNode})`
44
- }
45
- case UnaryNodeOperator.SQUARE_ROOT: {
46
- const valueNode = renderExpression(node.value)
47
- return `sqrt(${valueNode})`
48
- }
49
- default:
50
- throw new UnknownUnaryOperatorError(node.operator)
51
- }
52
- } else if (node instanceof NumberNode) {
53
- return node.toString()
54
- } else {
55
- throw new UnknownNodeTypeError(node.type)
56
- }
57
- }