diff --git a/README.md b/README.md index 507ac7a..4cd5f77 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,4 @@ This scripting language tries to simplify Arma mod development and eliminate the ## Syntax -``` -coming soon -``` +*coming soon* diff --git a/bin/main b/bin/main index 43e9b90..4b8511e 100755 Binary files a/bin/main and b/bin/main differ diff --git a/in/complex.asl b/in/complex.asl new file mode 100644 index 0000000..862f3bb --- /dev/null +++ b/in/complex.asl @@ -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); + } + } +} diff --git a/in/func.asl b/in/func.asl deleted file mode 100644 index 2bc81c1..0000000 --- a/in/func.asl +++ /dev/null @@ -1,3 +0,0 @@ -func somefunc() { - -} diff --git a/in/simple.asl b/in/simple.asl index 425af31..7fc6246 100644 --- a/in/simple.asl +++ b/in/simple.asl @@ -1,3 +1,28 @@ -while true { +if isServer { + exitWith(); +} -} \ No newline at end of file +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); + } + } +} diff --git a/in/statements.asl b/in/statements.asl deleted file mode 100644 index 5dab032..0000000 --- a/in/statements.asl +++ /dev/null @@ -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); diff --git a/in/zeus.asl b/in/zeus.asl deleted file mode 100644 index b75b59c..0000000 --- a/in/zeus.asl +++ /dev/null @@ -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()); -} diff --git a/pkg/linux_amd64/asl.a b/pkg/linux_amd64/asl.a index a002091..04dfc21 100644 Binary files a/pkg/linux_amd64/asl.a and b/pkg/linux_amd64/asl.a differ diff --git a/src/asl/parser.go b/src/asl/parser.go index 1abf0b7..d6c823d 100644 --- a/src/asl/parser.go +++ b/src/asl/parser.go @@ -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) diff --git a/src/asl/tokenizer.go b/src/asl/tokenizer.go index e9e5526..e793d80 100644 --- a/src/asl/tokenizer.go +++ b/src/asl/tokenizer.go @@ -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'} diff --git a/src/main/asl.go b/src/main/asl.go index 54670d0..59dbe20 100644 --- a/src/main/asl.go +++ b/src/main/asl.go @@ -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)