diff --git a/antlr-parser/examples/all-features.lang b/antlr-parser/examples/all-features.lang index 2a026c8..9c4bea4 100644 --- a/antlr-parser/examples/all-features.lang +++ b/antlr-parser/examples/all-features.lang @@ -19,12 +19,32 @@ func foo(a: Int, b: [Int]) { } } func bar() -> Test { - var v = new Test { intArray = new [Tree] {} } + var v = new Test { intArray = new [Tree] { new Tree{left=null,right=null} } } return v } func main() { var m = 42 + var j: Int var t: Tree - var b = true - var c: Bool + var array = new [Int] {size=10,1,2,3} + array[1] = 42 + t.left = null + if (m < 1) + print(1) + else if (m == 5) + print(2) + else + print(3) +} +func fib(n: Int)->Int { + var f1=1 + var f2=1 + var i=n + while( i>1 ){ + var temp = f1+f2 + f1=f2 + f2=temp + i=i-1 + } + return f2 } diff --git a/antlr-parser/src/main/antlr4/com/compilerprogramming/ezlang/antlr/EZLanguage.g4 b/antlr-parser/src/main/antlr4/com/compilerprogramming/ezlang/antlr/EZLanguage.g4 index 476ca54..bfcd0c8 100644 --- a/antlr-parser/src/main/antlr4/com/compilerprogramming/ezlang/antlr/EZLanguage.g4 +++ b/antlr-parser/src/main/antlr4/com/compilerprogramming/ezlang/antlr/EZLanguage.g4 @@ -22,16 +22,17 @@ varDeclaration ; typeName - : simpleType + : nominalType | arrayType ; -simpleType - : IDENTIFIER ('?')? +nominalType + : 'Int' + | IDENTIFIER ('?')? ; arrayType - : '[' simpleType ']' ('?')? + : '[' nominalType ']' ('?')? ; functionDeclaration diff --git a/optvm/src/test/java/com/compilerprogramming/ezlang/interpreter/TestInterpreter.java b/optvm/src/test/java/com/compilerprogramming/ezlang/interpreter/TestInterpreter.java index 161cf38..78af875 100644 --- a/optvm/src/test/java/com/compilerprogramming/ezlang/interpreter/TestInterpreter.java +++ b/optvm/src/test/java/com/compilerprogramming/ezlang/interpreter/TestInterpreter.java @@ -173,22 +173,19 @@ func foo()->Int { public void testFunction9() { String src = """ func fib(n: Int)->Int { - var i: Int; - var temp: Int; - var f1=1; - var f2=1; - i=n; + var f1=1 + var f2=1 + var i=n while( i>1 ){ - temp = f1+f2; - f1=f2; - f2=temp; - i=i-1; + var temp = f1+f2 + f1=f2 + f2=temp + i=i-1 } - return f2; + return f2 } - func foo()->Int { - return fib(10); + return fib(10) } """; var value = compileAndRun(src, "foo", Options.OPT); diff --git a/parser/src/main/java/com/compilerprogramming/ezlang/parser/Parser.java b/parser/src/main/java/com/compilerprogramming/ezlang/parser/Parser.java index 0d95fcb..821ce6c 100644 --- a/parser/src/main/java/com/compilerprogramming/ezlang/parser/Parser.java +++ b/parser/src/main/java/com/compilerprogramming/ezlang/parser/Parser.java @@ -334,13 +334,10 @@ private AST.Expr parseNew(Lexer lexer) { AST.TypeExpr resultType = parseTypeExpr(lexer); var newExpr = new AST.NewExpr(resultType); List initExpr = new ArrayList<>(); - int initType = 0; int index = 0; if (testPunctuation(lexer, "{")) { while (!isToken(currentToken, "}")) { if (currentToken.kind == Token.Kind.IDENT && lexer.peekChar() == '=') { - if (initType == 0) initType = 1; - else if (initType != 1) throw new CompilerException("Cannot mix initializer expressions"); String fieldname = currentToken.str; nextToken(lexer); matchPunctuation(lexer, "="); @@ -348,8 +345,6 @@ private AST.Expr parseNew(Lexer lexer) { initExpr.add(new AST.InitFieldExpr(newExpr, fieldname, value)); } else { - if (initType == 0) initType = 2; - else if (initType != 2) throw new CompilerException("Cannot mix initializer expressions"); var indexLit = Integer.valueOf(index++); var indexExpr = new AST.LiteralExpr(Token.newNum(indexLit,indexLit.toString(),0)); initExpr.add(new AST.ArrayInitExpr(newExpr, indexExpr, parseBool(lexer))); diff --git a/parser/src/test/java/com/compilerprogramming/ezlang/parser/TestParser.java b/parser/src/test/java/com/compilerprogramming/ezlang/parser/TestParser.java index 101c75d..1c60dc0 100644 --- a/parser/src/test/java/com/compilerprogramming/ezlang/parser/TestParser.java +++ b/parser/src/test/java/com/compilerprogramming/ezlang/parser/TestParser.java @@ -36,7 +36,7 @@ func bar() -> Test { func main() { var m = 42 var t: Tree - var array = new [Int] {1,2,3} + var array = new [Int] {size=10,1,2,3} array[1] = 42 t.left = null if (m < 1) diff --git a/seaofnodes/src/test/cases/fib/fib.ez b/seaofnodes/src/test/cases/fib/fib.ez index a30b6d9..9d07943 100644 --- a/seaofnodes/src/test/cases/fib/fib.ez +++ b/seaofnodes/src/test/cases/fib/fib.ez @@ -1,18 +1,16 @@ func fib(n: Int)->Int { - var i: Int; - var temp=0; - var f1=1; - var f2=1; - i=n; + var f1=1 + var f2=1 + var i=n while( i>1 ){ - temp = f1+f2; - f1=f2; - f2=temp; - i=i-1; + var temp = f1+f2 + f1=f2 + f2=temp + i=i-1 } - return f2; + return f2 } func foo()->Int { - return fib(10); + return fib(10) } \ No newline at end of file