mirror of
https://github.com/aNNiMON/Own-Programming-Language-Tutorial.git
synced 2024-09-20 08:44:20 +03:00
Дополнительные операторы для перегрузки
This commit is contained in:
parent
3b0f1f009e
commit
1cb2f70aee
@ -44,9 +44,15 @@ foreach(arr, def(v) {
|
||||
print v
|
||||
})
|
||||
|
||||
println "\n\nfunctional loop on map"
|
||||
println "\n\nFunctional loop on map"
|
||||
foreach(object, ::echo)
|
||||
foreach(object, def(k, v) {
|
||||
print " " + k + " : " + v
|
||||
})
|
||||
println ""
|
||||
println ""
|
||||
|
||||
// Range loop
|
||||
println "\n\nRange loop"
|
||||
for x : range(10) {
|
||||
print x
|
||||
}
|
@ -1,3 +1,4 @@
|
||||
use "std"
|
||||
use "types"
|
||||
use "math"
|
||||
|
||||
@ -8,4 +9,10 @@ println 1 :: 2 :: 3
|
||||
|
||||
def `^`(v1, v2) = pow(v1[0], v2[0])
|
||||
print "[2] ^ [7] = "
|
||||
println [2] ^ [7]
|
||||
println [2] ^ [7]
|
||||
|
||||
def `..`(a, b) = range(a, b - 1)
|
||||
def `**`(a, b) = int(pow(a, b))
|
||||
for y : 1 .. 10 {
|
||||
println sprintf("2 ^ %d = %d", y, 2 ** y)
|
||||
}
|
@ -75,6 +75,12 @@ public final class Lexer {
|
||||
OPERATORS.put("<<", TokenType.LTLT);
|
||||
OPERATORS.put(">>", TokenType.GTGT);
|
||||
OPERATORS.put(">>>", TokenType.GTGTGT);
|
||||
|
||||
OPERATORS.put("@", TokenType.AT);
|
||||
OPERATORS.put("@=", TokenType.ATEQ);
|
||||
OPERATORS.put("..", TokenType.DOTDOT);
|
||||
OPERATORS.put("**", TokenType.STARSTAR);
|
||||
OPERATORS.put("?:", TokenType.QUESTIONCOLON);
|
||||
}
|
||||
|
||||
private static final Map<String, TokenType> KEYWORDS;
|
||||
|
@ -43,6 +43,7 @@ public final class Parser {
|
||||
assignOperator.put(TokenType.LTLTEQ, BinaryExpression.Operator.LSHIFT);
|
||||
assignOperator.put(TokenType.GTGTEQ, BinaryExpression.Operator.RSHIFT);
|
||||
assignOperator.put(TokenType.GTGTGTEQ, BinaryExpression.Operator.URSHIFT);
|
||||
assignOperator.put(TokenType.ATEQ, BinaryExpression.Operator.AT);
|
||||
}
|
||||
|
||||
private final List<Token> tokens;
|
||||
@ -445,7 +446,9 @@ public final class Parser {
|
||||
final Expression falseExpr = expression();
|
||||
return new TernaryExpression(result, trueExpr, falseExpr);
|
||||
}
|
||||
|
||||
if (match(TokenType.QUESTIONCOLON)) {
|
||||
return new BinaryExpression(BinaryExpression.Operator.ELVIS, result, expression());
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -574,6 +577,10 @@ public final class Parser {
|
||||
expression = new BinaryExpression(BinaryExpression.Operator.URSHIFT, expression, additive());
|
||||
continue;
|
||||
}
|
||||
if (match(TokenType.DOTDOT)) {
|
||||
expression = new BinaryExpression(BinaryExpression.Operator.RANGE, expression, additive());
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
@ -596,6 +603,10 @@ public final class Parser {
|
||||
result = new BinaryExpression(BinaryExpression.Operator.PUSH, result, multiplicative());
|
||||
continue;
|
||||
}
|
||||
if (match(TokenType.AT)) {
|
||||
result = new BinaryExpression(BinaryExpression.Operator.AT, result, multiplicative());
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
@ -618,6 +629,10 @@ public final class Parser {
|
||||
result = new BinaryExpression(BinaryExpression.Operator.REMAINDER, result, unary());
|
||||
continue;
|
||||
}
|
||||
if (match(TokenType.STARSTAR)) {
|
||||
result = new BinaryExpression(BinaryExpression.Operator.POWER, result, unary());
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -34,6 +34,7 @@ public enum TokenType {
|
||||
STAR, // *
|
||||
SLASH, // /
|
||||
PERCENT,// %
|
||||
AT, // @
|
||||
|
||||
EQ, // =
|
||||
EQEQ, // ==
|
||||
@ -49,6 +50,7 @@ public enum TokenType {
|
||||
STAREQ, // *=
|
||||
SLASHEQ, // /=
|
||||
PERCENTEQ, // %=
|
||||
ATEQ, // @=
|
||||
AMPEQ, // &=
|
||||
CARETEQ, // ^=
|
||||
BAREQ, // |=
|
||||
@ -63,6 +65,10 @@ public enum TokenType {
|
||||
LTLT, // <<
|
||||
GTGT, // >>
|
||||
GTGTGT, // >>>
|
||||
|
||||
DOTDOT, // ..
|
||||
STARSTAR, // **
|
||||
QUESTIONCOLON, // ?:
|
||||
|
||||
TILDE, // ~
|
||||
CARET, // ^
|
||||
|
@ -29,7 +29,13 @@ public final class BinaryExpression implements Expression {
|
||||
XOR("^"),
|
||||
LSHIFT("<<"),
|
||||
RSHIFT(">>"),
|
||||
URSHIFT(">>>");
|
||||
URSHIFT(">>>"),
|
||||
|
||||
// Addition operators for future usage or overloading
|
||||
AT("@"),
|
||||
RANGE(".."),
|
||||
POWER("**"),
|
||||
ELVIS("?:");
|
||||
|
||||
private final String name;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user