diff --git a/bin/main b/bin/main index e7044d3..977d7e3 100755 Binary files a/bin/main and b/bin/main differ diff --git a/in/simple.asl b/in/simple.asl index 5b7f06b..78f034e 100644 --- a/in/simple.asl +++ b/in/simple.asl @@ -22,3 +22,14 @@ if (_a+_b)/2 > 10 { myFunc(_a, _b); myFunc(_a, _b); + +var _x = 3; + +switch _x { + case 1: + case 2: + somefunc(2); + default: + somefunc(3); + _x = -1; +} diff --git a/in/statements.asl b/in/statements.asl index 93566f8..f12112b 100644 --- a/in/statements.asl +++ b/in/statements.asl @@ -1,9 +1,7 @@ -var _x = 3; - -switch _x { - case 1: - case 2: - somefunc(2); - default: - somefunc(3); +for var _x = 5; _x < 5; _x = _x+1; { + printSomething("nice"); + printSomething("nice"); + printSomething("nice"); + printSomething("nice"); + printSomething("nice"); } diff --git a/pkg/linux_amd64/asl.a b/pkg/linux_amd64/asl.a index 8d18cf4..b96d4fd 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 9c47128..540074d 100644 --- a/src/asl/parser.go +++ b/src/asl/parser.go @@ -25,6 +25,8 @@ func parseBlock() { parseWhile() } else if accept("switch") { parseSwitch() + } else if accept("for") { + parseFor() } else if accept("func") { parseFunction() } else { @@ -121,6 +123,30 @@ func parseSwitchBlock() { parseSwitchBlock() } +func parseFor() { + expect("for") + appendOut("for [{") + + // var in first assignment is optional + if accept("var") { + next() + } + + parseExpression() + expect(";") + appendOut("}, {") + parseExpression() + expect(";") + appendOut("}, {") + parseExpression() + expect(";") + appendOut("}] do {\n") + expect("{") + parseBlock() + expect("}") + appendOut("};\n") +} + func parseFunction() { expect("func") appendOut(get().token+" = {\n") diff --git a/src/asl/tokenizer.go b/src/asl/tokenizer.go index 0154c56..c66cd42 100644 --- a/src/asl/tokenizer.go +++ b/src/asl/tokenizer.go @@ -27,6 +27,7 @@ var keywords = []string{"var", "if", "while", "switch", + "for", "func", "true", "false",