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