Build in functions.

This commit is contained in:
Marvin Blum
2015-09-21 20:26:49 +02:00
parent b489e5018c
commit 5a91193cae
11 changed files with 94 additions and 95 deletions

View File

@@ -5,6 +5,4 @@ This scripting language tries to simplify Arma mod development and eliminate the
## Syntax
```
coming soon
```
*coming soon*

BIN
bin/main

Binary file not shown.

28
in/complex.asl Normal file
View File

@@ -0,0 +1,28 @@
if isServer {
exitWith();
}
func ZeusGrpPlaced(_curators, _group) {
each allCurators-_curators {
$addCuratorEditableObjects<_x>(_group, true);
}
}
func ZeusObjPlaced(_curators, _unit) {
each allCurators-_curators {
$addCuratorEditableObjects<_x>([_unit], true);
}
}
each allCurators {
$addCuratorEditableObjects<_x>(allUnits, true);
$addCuratorEditableObjects<_x>(allMissionObjects("All"), false);
_curator = _x;
each allUnits {
if vehicle(_x) != _x {
$addCuratorEditableObjects<_curator>([vehicle(_x)], true);
}
}
}

View File

@@ -1,3 +0,0 @@
func somefunc() {
}

View File

@@ -1,3 +1,28 @@
while true {
if isServer {
exitWith();
}
func ZeusGrpPlaced(_curators, _group) {
each allCurators-_curators {
$addCuratorEditableObjects(_x)(_group, true);
}
}
func ZeusObjPlaced(_curators, _unit) {
each allCurators-_curators {
$addCuratorEditableObjects(_x)([_unit], true);
}
}
each allCurators {
$addCuratorEditableObjects(_x)(allUnits, true);
$addCuratorEditableObjects(_x)(allMissionObjects("All"), false);
_curator = _x;
each allUnits {
if vehicle(_x) != _x {
$addCuratorEditableObjects(_curator)([vehicle(_x)], true);
}
}
}

View File

@@ -1,57 +0,0 @@
func foo(_out) {
hint(_out);
}
func bar(_out) {
hint(reverse(_out));
}
func inlineFunction(_multiple, _parameters, _should, _work) {
_a = "Not working yet...";
}
var _array;
each array {
if _x > 200 {
foo(_x);
} else {
bar("nope", _x);
}
}
var _x = 123;
for var _i = 0; _i < 10; _i = _i+1; {
_x = _x+1;
_foo = "Foo";
_bar = "Bar";
fun(_foo, _bar);
}
switch _x {
case 1:
case 2:
somefunc(2);
default:
somefunc(3);
_x = -1;
}
func myFunc(_x, _y) {
if _x < _y {
myFunc(_y, _x);
hint("Rekursiv");
}
}
if _a < _b {
if _b < _a {
myFunc(_a, _b+9-(2/2));
myFunc(_a, _b);
myFunc(_a, _b);
}
}
myFunc(_a, _b);
myFunc(_a, _b);

View File

@@ -1,26 +0,0 @@
if isServer {
exitWith();
}
func ZeusGrpPlaced(_group) {
}
func ZeusObjPlaced(_unit) {
}
foreach curator => allCurators {
addCuratorEditableObjects(curator, allUnits, true);
addCuratorEditableObjects(curator, allMissionObjects("All"), false);
foreach unit => allUnits {
var _vehicle = vehicle(unit);
if _vehicle != unit {
addCuratorEditableObjects(curator, _vehicle, true);
}
}
addEventHandler(curator, "CuratorGroupPlaced", BIS_fnc_MP());
}

Binary file not shown.

View File

@@ -31,9 +31,15 @@ func parseBlock() {
parseForeach()
} else if accept("func") {
parseFunction()
} else if accept("return") {
parseReturn()
} else {
parseStatement()
}
if !end() && !accept("}") {
parseBlock()
}
}
func parseVar() {
@@ -192,6 +198,14 @@ func parseFunctionParameter() {
}
}
func parseReturn() {
expect("return")
appendOut("return ")
parseExpression(true)
expect(";")
appendOut(";\n")
}
// Everything that does not start with a keyword.
func parseStatement() {
// empty block
@@ -206,13 +220,17 @@ func parseStatement() {
if accept("=") {
appendOut(name)
parseAssignment()
} else if name == "$" {
name = get().token
next()
parseBuildinFunctionCall(name);
} else {
parseFunctionCall()
appendOut(name+";\n")
}
if !end() {
parseStatement()
parseBlock()
}
}
@@ -233,6 +251,20 @@ func parseFunctionCall() {
appendOut("] call ")
}
func parseBuildinFunctionCall(name string) {
expect("(")
appendOut("[")
parseParameter()
expect(")")
appendOut("] ")
expect("(")
appendOut(name+" [")
parseParameter()
expect(")")
expect(";")
appendOut("];\n")
}
func parseParameter() {
for !accept(")") {
parseExpression(true)

View File

@@ -21,7 +21,8 @@ var delimiter = []byte{
',',
':',
'&',
'|'}
'|',
'$'}
var keywords = []string{
"var",
@@ -34,7 +35,8 @@ var keywords = []string{
"true",
"false",
"case",
"default"}
"default",
"return"}
var whitespace = []byte{' ', '\n', '\t'}

View File

@@ -8,7 +8,7 @@ import (
func main(){
// read test file
code, _ := ioutil.ReadFile("in/statements.asl")
code, _ := ioutil.ReadFile("in/simple.asl")
token := asl.Tokenize(code)
out := asl.Parse(token)