Arithmetic evaluation: Difference between revisions

(→‎{{header|Groovy}}: new solution)
Line 1,442:
Expression parse(String expr) {
def tokens = tokenize(expr)
def elements = preParsegroupByParens(tokens, 0)
parse(elements)
}
Line 1,469:
}
}
captureConstant(expr.size())
tokens
}
 
List preParsegroupByParens(List tokens, int depth) {
def deepness = depth
def tokenGroups = []
Line 1,481:
case '(':
fail("'(' too close to end of expression") { i+2 > tokens.size() }
def subGroup = preParsegroupByParens(tokens[i+1..-1], depth+1)
tokenGroups << subGroup[0..-2]
i += subGroup[-1] + 1
Line 1,558:
try { testParse('+++++') } catch (e) { println e }
try { testParse('1 /') } catch (e) { println e }
try { testParse('1++') } catch (e) { println e }
try { testParse('*1') } catch (e) { println e }
try { testParse('/ 1 /') } catch (e) { println e }</lang>
Line 1,623 ⟶ 1,624:
java.lang.IllegalArgumentException: Cannot parse expression: Invalid constant '+' near position 1
java.lang.IllegalArgumentException: Cannot parse expression: The operand/operator sequence is wrong
java.lang.IllegalArgumentException: Cannot parse expression: Invalid constant '+' near position 3
java.lang.IllegalArgumentException: Cannot parse expression: The operand/operator sequence is wrong
java.lang.IllegalArgumentException: Cannot parse expression: The operand/operator sequence is wrong</pre>
Anonymous user