Skip to content

Commit ca8e7ff

Browse files
Kelvin LauKelvin Lau
authored andcommitted
Fixed spacing.
1 parent 4f22641 commit ca8e7ff

File tree

2 files changed

+270
-270
lines changed

2 files changed

+270
-270
lines changed

Shunting Yard/ShuntingYard.playground/Contents.swift

Lines changed: 87 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -12,21 +12,21 @@ public enum OperatorType: CustomStringConvertible {
1212
case multiply
1313
case percent
1414
case exponent
15-
15+
1616
public var description: String {
1717
switch self {
18-
case .add:
19-
return "+"
20-
case .subtract:
21-
return "-"
22-
case .divide:
23-
return "/"
24-
case .multiply:
25-
return "*"
26-
case .percent:
27-
return "%"
28-
case .exponent:
29-
return "^"
18+
case .add:
19+
return "+"
20+
case .subtract:
21+
return "-"
22+
case .divide:
23+
return "/"
24+
case .multiply:
25+
return "*"
26+
case .percent:
27+
return "%"
28+
case .exponent:
29+
return "^"
3030
}
3131
}
3232
}
@@ -36,48 +36,48 @@ public enum TokenType: CustomStringConvertible {
3636
case closeBracket
3737
case Operator(OperatorToken)
3838
case operand(Double)
39-
39+
4040
public var description: String {
4141
switch self {
42-
case .openBracket:
43-
return "("
44-
case .closeBracket:
45-
return ")"
46-
case .Operator(let operatorToken):
47-
return operatorToken.description
48-
case .operand(let value):
49-
return "\(value)"
42+
case .openBracket:
43+
return "("
44+
case .closeBracket:
45+
return ")"
46+
case .Operator(let operatorToken):
47+
return operatorToken.description
48+
case .operand(let value):
49+
return "\(value)"
5050
}
5151
}
5252
}
5353

5454
public struct OperatorToken: CustomStringConvertible {
5555
let operatorType: OperatorType
56-
56+
5757
init(operatorType: OperatorType) {
5858
self.operatorType = operatorType
5959
}
60-
60+
6161
var precedence: Int {
6262
switch operatorType {
63-
case .add, .subtract:
64-
return 0
65-
case .divide, .multiply, .percent:
66-
return 5
67-
case .exponent:
68-
return 10
63+
case .add, .subtract:
64+
return 0
65+
case .divide, .multiply, .percent:
66+
return 5
67+
case .exponent:
68+
return 10
6969
}
7070
}
71-
71+
7272
var associativity: OperatorAssociativity {
7373
switch operatorType {
74-
case .add, .subtract, .divide, .multiply, .percent:
75-
return .leftAssociative
76-
case .exponent:
77-
return .rightAssociative
74+
case .add, .subtract, .divide, .multiply, .percent:
75+
return .leftAssociative
76+
case .exponent:
77+
return .rightAssociative
7878
}
7979
}
80-
80+
8181
public var description: String {
8282
return operatorType.description
8383
}
@@ -93,74 +93,74 @@ func < (left: OperatorToken, right: OperatorToken) -> Bool {
9393

9494
public struct Token: CustomStringConvertible {
9595
let tokenType: TokenType
96-
96+
9797
init(tokenType: TokenType) {
9898
self.tokenType = tokenType
9999
}
100-
100+
101101
init(operand: Double) {
102102
tokenType = .operand(operand)
103103
}
104-
104+
105105
init(operatorType: OperatorType) {
106106
tokenType = .Operator(OperatorToken(operatorType: operatorType))
107107
}
108-
108+
109109
var isOpenBracket: Bool {
110110
switch tokenType {
111-
case .openBracket:
112-
return true
113-
default:
114-
return false
111+
case .openBracket:
112+
return true
113+
default:
114+
return false
115115
}
116116
}
117-
117+
118118
var isOperator: Bool {
119119
switch tokenType {
120-
case .Operator(_):
121-
return true
122-
default:
123-
return false
120+
case .Operator(_):
121+
return true
122+
default:
123+
return false
124124
}
125125
}
126-
126+
127127
var operatorToken: OperatorToken? {
128128
switch tokenType {
129-
case .Operator(let operatorToken):
130-
return operatorToken
131-
default:
132-
return nil
129+
case .Operator(let operatorToken):
130+
return operatorToken
131+
default:
132+
return nil
133133
}
134134
}
135-
135+
136136
public var description: String {
137137
return tokenType.description
138138
}
139139
}
140140

141141
public class InfixExpressionBuilder {
142142
private var expression = [Token]()
143-
143+
144144
public func addOperator(_ operatorType: OperatorType) -> InfixExpressionBuilder {
145145
expression.append(Token(operatorType: operatorType))
146146
return self
147147
}
148-
148+
149149
public func addOperand(_ operand: Double) -> InfixExpressionBuilder {
150150
expression.append(Token(operand: operand))
151151
return self
152152
}
153-
153+
154154
public func addOpenBracket() -> InfixExpressionBuilder {
155155
expression.append(Token(tokenType: .openBracket))
156156
return self
157157
}
158-
158+
159159
public func addCloseBracket() -> InfixExpressionBuilder {
160160
expression.append(Token(tokenType: .closeBracket))
161161
return self
162162
}
163-
163+
164164
public func build() -> [Token] {
165165
// Maybe do some validation here
166166
return expression
@@ -169,46 +169,46 @@ public class InfixExpressionBuilder {
169169

170170
// This returns the result of the shunting yard algorithm
171171
public func reversePolishNotation(_ expression: [Token]) -> String {
172-
172+
173173
var tokenStack = Stack<Token>()
174174
var reversePolishNotation = [Token]()
175-
175+
176176
for token in expression {
177177
switch token.tokenType {
178-
case .operand(_):
179-
reversePolishNotation.append(token)
180-
181-
case .openBracket:
182-
tokenStack.push(token)
183-
184-
case .closeBracket:
185-
while tokenStack.count > 0, let tempToken = tokenStack.pop(), !tempToken.isOpenBracket {
186-
reversePolishNotation.append(tempToken)
178+
case .operand(_):
179+
reversePolishNotation.append(token)
180+
181+
case .openBracket:
182+
tokenStack.push(token)
183+
184+
case .closeBracket:
185+
while tokenStack.count > 0, let tempToken = tokenStack.pop(), !tempToken.isOpenBracket {
186+
reversePolishNotation.append(tempToken)
187+
}
188+
189+
case .Operator(let operatorToken):
190+
for tempToken in tokenStack.makeIterator() {
191+
if !tempToken.isOperator {
192+
break
187193
}
188-
189-
case .Operator(let operatorToken):
190-
for tempToken in tokenStack.makeIterator() {
191-
if !tempToken.isOperator {
194+
195+
if let tempOperatorToken = tempToken.operatorToken {
196+
if operatorToken.associativity == .leftAssociative && operatorToken <= tempOperatorToken
197+
|| operatorToken.associativity == .rightAssociative && operatorToken < tempOperatorToken {
198+
reversePolishNotation.append(tokenStack.pop()!)
199+
} else {
192200
break
193201
}
194-
195-
if let tempOperatorToken = tempToken.operatorToken {
196-
if operatorToken.associativity == .leftAssociative && operatorToken <= tempOperatorToken
197-
|| operatorToken.associativity == .rightAssociative && operatorToken < tempOperatorToken {
198-
reversePolishNotation.append(tokenStack.pop()!)
199-
} else {
200-
break
201-
}
202-
}
203202
}
204-
tokenStack.push(token)
203+
}
204+
tokenStack.push(token)
205205
}
206206
}
207-
207+
208208
while tokenStack.count > 0 {
209209
reversePolishNotation.append(tokenStack.pop()!)
210210
}
211-
211+
212212
return reversePolishNotation.map({token in token.description}).joined(separator: " ")
213213
}
214214

0 commit comments

Comments
 (0)