diff --git a/src/main/java/com/annimon/ownlang/parser/Lexer.java b/src/main/java/com/annimon/ownlang/parser/Lexer.java index eea695a..ca4332a 100644 --- a/src/main/java/com/annimon/ownlang/parser/Lexer.java +++ b/src/main/java/com/annimon/ownlang/parser/Lexer.java @@ -80,6 +80,7 @@ public final class Lexer { OPERATORS.put("@=", TokenType.ATEQ); OPERATORS.put("..", TokenType.DOTDOT); OPERATORS.put("**", TokenType.STARSTAR); + OPERATORS.put("^^", TokenType.CARETCARET); OPERATORS.put("?:", TokenType.QUESTIONCOLON); } diff --git a/src/main/java/com/annimon/ownlang/parser/Parser.java b/src/main/java/com/annimon/ownlang/parser/Parser.java index 6fe5724..7f5c860 100644 --- a/src/main/java/com/annimon/ownlang/parser/Parser.java +++ b/src/main/java/com/annimon/ownlang/parser/Parser.java @@ -629,6 +629,10 @@ public final class Parser { result = new BinaryExpression(BinaryExpression.Operator.AT, result, multiplicative()); continue; } + if (match(TokenType.CARETCARET)) { + result = new BinaryExpression(BinaryExpression.Operator.CARETCARET, result, multiplicative()); + continue; + } break; } diff --git a/src/main/java/com/annimon/ownlang/parser/TokenType.java b/src/main/java/com/annimon/ownlang/parser/TokenType.java index f949651..d30bbd2 100644 --- a/src/main/java/com/annimon/ownlang/parser/TokenType.java +++ b/src/main/java/com/annimon/ownlang/parser/TokenType.java @@ -72,6 +72,7 @@ public enum TokenType { TILDE, // ~ CARET, // ^ + CARETCARET, // ^^ BAR, // | BARBAR, // || AMP, // & diff --git a/src/main/java/com/annimon/ownlang/parser/ast/BinaryExpression.java b/src/main/java/com/annimon/ownlang/parser/ast/BinaryExpression.java index 347ceb8..3749ae7 100644 --- a/src/main/java/com/annimon/ownlang/parser/ast/BinaryExpression.java +++ b/src/main/java/com/annimon/ownlang/parser/ast/BinaryExpression.java @@ -33,6 +33,7 @@ public final class BinaryExpression implements Expression { // Addition operators for future usage or overloading AT("@"), + CARETCARET("^^"), RANGE(".."), POWER("**"), ELVIS("?:");