Поддержка операций проверки равенства
This commit is contained in:
parent
027fc4a524
commit
377b7f6df1
@ -412,7 +412,26 @@ public final class Parser {
|
||||
}
|
||||
|
||||
private Expression expression() {
|
||||
return additive();
|
||||
return equality();
|
||||
}
|
||||
|
||||
private Expression equality() {
|
||||
Expression expression = additive();
|
||||
|
||||
if (lookMatch(1, TokenType.EQ)) {
|
||||
if (match(TokenType.EQ)) {
|
||||
// ==
|
||||
match(TokenType.EQ);
|
||||
return new BinaryExpression(Operator.EQUALS, expression, additive());
|
||||
}
|
||||
if (match(TokenType.EXCL)) {
|
||||
// !=
|
||||
match(TokenType.EQ);
|
||||
return new BinaryExpression(Operator.NOTEQUALS, expression, additive());
|
||||
}
|
||||
}
|
||||
|
||||
return expression;
|
||||
}
|
||||
|
||||
private Expression additive() {
|
||||
|
@ -6,7 +6,8 @@ package com.annimon.everlastingsummer.ast;
|
||||
public class BinaryExpression implements Expression {
|
||||
|
||||
public static enum Operator {
|
||||
ADD, SUBTRACT
|
||||
ADD, SUBTRACT,
|
||||
EQUALS, NOTEQUALS,
|
||||
}
|
||||
|
||||
public final Operator operator;
|
||||
@ -25,6 +26,8 @@ public class BinaryExpression implements Expression {
|
||||
switch (operator) {
|
||||
case ADD: return leftVal + rightVal;
|
||||
case SUBTRACT: return leftVal - rightVal;
|
||||
case EQUALS: return (leftVal == rightVal) ? 1 : 0;
|
||||
case NOTEQUALS: return (leftVal != rightVal) ? 1 : 0;
|
||||
default:
|
||||
throw new RuntimeException("Неизвестный оператор " + operator.name());
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user