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() {
|
||||
final var result = new LinkedHashMap<String, Value>(16);
|
||||
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));
|
||||
@ -258,8 +260,11 @@ public final class java implements Module {
|
||||
|
||||
private Value toValue(Value[] args) {
|
||||
Arguments.check(1, args.length);
|
||||
if (args[0] instanceof ObjectValue) {
|
||||
return objectToValue( ((ObjectValue) args[0]).object );
|
||||
if (args[0] instanceof ObjectValue obj) {
|
||||
if (obj.object != null && Boolean.class.isAssignableFrom(obj.object.getClass())) {
|
||||
return NumberValue.fromBoolean((Boolean) obj.object);
|
||||
}
|
||||
return objectToValue(obj.object);
|
||||
}
|
||||
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