File tree Expand file tree Collapse file tree 3 files changed +28
-1
lines changed Expand file tree Collapse file tree 3 files changed +28
-1
lines changed Original file line number Diff line number Diff line change @@ -3,6 +3,7 @@ const calc = require('./calc')
3
3
4
4
module . exports = function app ( exp ) {
5
5
var type = postfixer . getExpressionType ( exp )
6
+ console . log ( type )
6
7
var rst = null
7
8
if ( type === postfixer . PREFIX ) {
8
9
rst = calcPrefix ( exp )
@@ -58,6 +59,16 @@ function calcPostfix (exp) {
58
59
var o1 = getValue ( stack . pop ( ) )
59
60
var rst = calc ( token , o1 , o2 )
60
61
stack . push ( rst )
62
+ } else if ( token [ token . length - 1 ] === '(' ) {
63
+ var args = [ ]
64
+ var o = stack . pop ( )
65
+ while ( o !== ')' ) {
66
+ args . push ( o )
67
+ o = stack . pop ( )
68
+ }
69
+ args . reverse ( )
70
+ var rst = Math [ token . substr ( 0 , token . length - 1 ) ] . apply ( null , args )
71
+ stack . push ( rst )
61
72
} else {
62
73
stack . push ( token )
63
74
}
Original file line number Diff line number Diff line change @@ -17,7 +17,7 @@ const MATH_EXTEND = {
17
17
const isOperator = require ( './calc' ) . isOperator
18
18
19
19
function getExpressionType ( exp ) {
20
- if ( isOperator ( exp [ exp . length - 1 ] ) ) return POSTFIX
20
+ if ( isOperator ( exp [ exp . length - 1 ] ) || exp [ exp . length - 1 ] === '(' ) return POSTFIX
21
21
if ( isOperator ( exp [ 0 ] ) ) {
22
22
// negative number -> infix notation
23
23
if ( exp . length > 1 && exp [ 1 ] >= '0' && exp [ 1 ] <= '9' ) return INFIX
Original file line number Diff line number Diff line change
1
+ const test = require ( 'tape' )
2
+ var app = require ( '../app' )
3
+
4
+ test ( 'func - postfix test' , function ( t ) {
5
+ t . equal ( app ( '1 3 +' ) , 4 )
6
+
7
+ t . equal ( app ( ') 3 0 -2 19 min(' ) , 4 )
8
+
9
+ t . equal ( app ( ') 3 0 -2 19 max(' ) , 4 )
10
+
11
+ t . equal ( app ( ') -1 abs( 10 +' ) , 4 )
12
+
13
+ t . equal ( app ( ') 2 ) 2 3 pow( - max(' ) , 4 )
14
+
15
+ t . end ( )
16
+ } )
You can’t perform that action at this time.
0 commit comments