mirror of
https://github.com/aNNiMON/Own-Programming-Language-Tutorial.git
synced 2024-09-20 00:34:20 +03:00
[java] Add Boolean converter to Value, add collections example
This commit is contained in:
parent
3bed30ca59
commit
a05e9e55e3
44
examples/java/collections.own
Normal file
44
examples/java/collections.own
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
use java
|
||||||
|
|
||||||
|
println "OwnLang array to Java array"
|
||||||
|
arr = toObject([1, 2, 4, 2, 0, 4, 3])
|
||||||
|
println arr
|
||||||
|
|
||||||
|
println "\nArrays.asList"
|
||||||
|
Arrays = newClass("java.util.Arrays")
|
||||||
|
list1 = Arrays.asList(arr)
|
||||||
|
println list1
|
||||||
|
|
||||||
|
println "\nStack"
|
||||||
|
Stack = newClass("java.util.Stack")
|
||||||
|
stack = new Stack()
|
||||||
|
stack.push(1)
|
||||||
|
stack.push(2)
|
||||||
|
stack.push(3)
|
||||||
|
println stack.pop()
|
||||||
|
println stack.pop()
|
||||||
|
|
||||||
|
|
||||||
|
println "\nArrayList from Stack"
|
||||||
|
ArrayList = newClass("java.util.ArrayList")
|
||||||
|
list2 = new ArrayList(stack)
|
||||||
|
list2.add(4)
|
||||||
|
for element : list2.toArray() {
|
||||||
|
println element
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
println "\nHashSet"
|
||||||
|
HashSet = newClass("java.util.HashSet")
|
||||||
|
set = new HashSet(list1)
|
||||||
|
println set
|
||||||
|
containsFour = set.contains(4)
|
||||||
|
// NOTE: containsFour is java.lang.Boolean
|
||||||
|
println containsFour.getClass()
|
||||||
|
isContainsFour = toValue(containsFour)
|
||||||
|
if (isContainsFour) {
|
||||||
|
println "Set contains 4"
|
||||||
|
}
|
||||||
|
for element : set.toArray() {
|
||||||
|
println element
|
||||||
|
}
|
@ -24,6 +24,8 @@ public final class java implements Module {
|
|||||||
public Map<String, Value> constants() {
|
public Map<String, Value> constants() {
|
||||||
final var result = new LinkedHashMap<String, Value>(16);
|
final var result = new LinkedHashMap<String, Value>(16);
|
||||||
result.put("null", NULL);
|
result.put("null", NULL);
|
||||||
|
result.put("TRUE", new ObjectValue(Boolean.TRUE));
|
||||||
|
result.put("FALSE", new ObjectValue(Boolean.FALSE));
|
||||||
result.put("boolean.class", new ClassValue(boolean.class));
|
result.put("boolean.class", new ClassValue(boolean.class));
|
||||||
result.put("boolean[].class", new ClassValue(boolean[].class));
|
result.put("boolean[].class", new ClassValue(boolean[].class));
|
||||||
result.put("boolean[][].class", new ClassValue(boolean[][].class));
|
result.put("boolean[][].class", new ClassValue(boolean[][].class));
|
||||||
@ -258,8 +260,11 @@ public final class java implements Module {
|
|||||||
|
|
||||||
private Value toValue(Value[] args) {
|
private Value toValue(Value[] args) {
|
||||||
Arguments.check(1, args.length);
|
Arguments.check(1, args.length);
|
||||||
if (args[0] instanceof ObjectValue) {
|
if (args[0] instanceof ObjectValue obj) {
|
||||||
return objectToValue( ((ObjectValue) args[0]).object );
|
if (obj.object != null && Boolean.class.isAssignableFrom(obj.object.getClass())) {
|
||||||
|
return NumberValue.fromBoolean((Boolean) obj.object);
|
||||||
|
}
|
||||||
|
return objectToValue(obj.object);
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
45
ownlang-parser/src/test/resources/benchmarks/calculator.own
Normal file
45
ownlang-parser/src/test/resources/benchmarks/calculator.own
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
// Simple parser example
|
||||||
|
use std, types
|
||||||
|
|
||||||
|
operations = {
|
||||||
|
"+" : def(a,b) = a+b,
|
||||||
|
"-" : def(a,b) = a-b,
|
||||||
|
"*" : def(a,b) = a*b,
|
||||||
|
"/" : def(a,b) = a/b,
|
||||||
|
"%" : def(a,b) = a%b,
|
||||||
|
">" : def(a,b) = a>b,
|
||||||
|
"<" : def(a,b) = a<b
|
||||||
|
}
|
||||||
|
|
||||||
|
def calculate(expression) {
|
||||||
|
pos = 0
|
||||||
|
len = length(expression)
|
||||||
|
|
||||||
|
def isDigit(c) = 48 <= c && c <= 57
|
||||||
|
|
||||||
|
def parseNumber() {
|
||||||
|
buffer = ""
|
||||||
|
while (pos < len && isDigit(expression.charAt(pos))) {
|
||||||
|
buffer += toChar(expression.charAt(pos))
|
||||||
|
pos++
|
||||||
|
}
|
||||||
|
return number(buffer)
|
||||||
|
}
|
||||||
|
|
||||||
|
def parseOperation() {
|
||||||
|
while (pos < len && !arrayKeyExists(toChar(expression.charAt(pos)), operations)) {
|
||||||
|
pos++
|
||||||
|
}
|
||||||
|
return operations[toChar(expression.charAt(pos++))]
|
||||||
|
}
|
||||||
|
|
||||||
|
num1 = parseNumber()
|
||||||
|
op = parseOperation()
|
||||||
|
num2 = parseNumber()
|
||||||
|
return op(num1, num2)
|
||||||
|
}
|
||||||
|
|
||||||
|
x = calculate("2+2")
|
||||||
|
+ calculate("400*16")
|
||||||
|
+ calculate("400/160")
|
||||||
|
+ calculate("3>4")
|
Loading…
Reference in New Issue
Block a user