Naposledy aktivní 1747524947

Revize 8c3ee02c972037d5f1d19911cd92f6772d984379

shunting-yard.nv Raw Playground
1|:eval: * $x $y| :@math: multiply $x $y
2|:eval: / $x $y| :@math: divide $x $y
3|:eval: + $x $y| :@math: add $x $y
4|:eval: - $x $y| :@math: subtract $x $y
5
6|:precedence: *| :precedence: * 2
7|:precedence: /| :precedence: / 2
8|:precedence: +| :precedence: + 1
9|:precedence: -| :precedence: - 1
10|:precedence: $x| :not an operator:
11
12|:: ) :ops: (|
13
14|:: $token|
15 :: classify token :token: $token
16 :: push to its stack
17
18|:: classify token :token: +?| :operator:
19|:: classify token :token: -?| :operator:
20|:: classify token :token: /?| :operator:
21|:: classify token :token: *?| :operator:
22|:: classify token :token: [?| :operator:
23|:: classify token :token: ]?| :operator:
24|:: classify token :token: $x?| :value:
25
26|:: push to its stack :token: $token? :operator:|
27 :: evaluate token
28
29|:: push to its stack :token: $token :value:|
30 :values: $token
31
32|:: evaluate token :token: [|
33 :operators: [
34
35|:: evaluate token :token: ] :operators: [|
36
37|:: evaluate token :token: $token :operators: [|
38 :operators: $token
39 :operators: [
40
41|:: evaluate token :token: ]? :operators: $op :values: ($a $b)|
42 :eval: $op $b $a
43 :: push result
44 :: evaluate token
45
46|:: evaluate token :token: $incoming :operators: $top?|
47 :: get precedence for $top
48 :: get precedence for $incoming
49 :: compare precedence
50
51|:: push result :@math: $result|
52 :values: $result
53
54|:: evaluate token :token: $token|
55 :operators: $token
56
57|:: get precedence for $token|
58 :precedence: $token
59
60|:: compare precedence :precedence: $incoming $x :precedence: $top $y|
61 :@math: compare $x $y
62 :: push $incoming operator
63
64|:: push $incoming operator :@math: greater|
65 :operators: $incoming
66
67|:: push $incoming operator :@math: $not-greater :operators: ($eval $next) :values: ($a $b)|
68 :: push result :eval: $eval $b $a
69 :: get precedence for $next
70 :: get precedence for $incoming
71 :: compare precedence
72 :operators: $next
73
74|:: push $incoming operator :@math: $not-greater :operators: $eval :values: ($a $b)|
75 :: push result :eval: $eval $b $a
76 :operators: $incoming
77
78|:operators: $eval :values: ($a $b)|
79 :: push result :eval: $eval $b $a
80
81||
82 :: (142 + 20 * [ 40 + 5 * 3 ] + 4 * 79 / 4 - 2)