Skip to content

Commit 790d2aa

Browse files
Merge pull request #45 from CompilerProgramming/develop
Small updates
2 parents b3701a8 + 3144cb5 commit 790d2aa

File tree

6 files changed

+47
-36
lines changed

6 files changed

+47
-36
lines changed

antlr-parser/examples/all-features.lang

+23-3
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,32 @@ func foo(a: Int, b: [Int]) {
1919
}
2020
}
2121
func bar() -> Test {
22-
var v = new Test { intArray = new [Tree] {} }
22+
var v = new Test { intArray = new [Tree] { new Tree{left=null,right=null} } }
2323
return v
2424
}
2525
func main() {
2626
var m = 42
27+
var j: Int
2728
var t: Tree
28-
var b = true
29-
var c: Bool
29+
var array = new [Int] {size=10,1,2,3}
30+
array[1] = 42
31+
t.left = null
32+
if (m < 1)
33+
print(1)
34+
else if (m == 5)
35+
print(2)
36+
else
37+
print(3)
38+
}
39+
func fib(n: Int)->Int {
40+
var f1=1
41+
var f2=1
42+
var i=n
43+
while( i>1 ){
44+
var temp = f1+f2
45+
f1=f2
46+
f2=temp
47+
i=i-1
48+
}
49+
return f2
3050
}

antlr-parser/src/main/antlr4/com/compilerprogramming/ezlang/antlr/EZLanguage.g4

+5-4
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,17 @@ varDeclaration
2222
;
2323

2424
typeName
25-
: simpleType
25+
: nominalType
2626
| arrayType
2727
;
2828

29-
simpleType
30-
: IDENTIFIER ('?')?
29+
nominalType
30+
: 'Int'
31+
| IDENTIFIER ('?')?
3132
;
3233

3334
arrayType
34-
: '[' simpleType ']' ('?')?
35+
: '[' nominalType ']' ('?')?
3536
;
3637

3738
functionDeclaration

optvm/src/test/java/com/compilerprogramming/ezlang/interpreter/TestInterpreter.java

+9-12
Original file line numberDiff line numberDiff line change
@@ -173,22 +173,19 @@ func foo()->Int {
173173
public void testFunction9() {
174174
String src = """
175175
func fib(n: Int)->Int {
176-
var i: Int;
177-
var temp: Int;
178-
var f1=1;
179-
var f2=1;
180-
i=n;
176+
var f1=1
177+
var f2=1
178+
var i=n
181179
while( i>1 ){
182-
temp = f1+f2;
183-
f1=f2;
184-
f2=temp;
185-
i=i-1;
180+
var temp = f1+f2
181+
f1=f2
182+
f2=temp
183+
i=i-1
186184
}
187-
return f2;
185+
return f2
188186
}
189-
190187
func foo()->Int {
191-
return fib(10);
188+
return fib(10)
192189
}
193190
""";
194191
var value = compileAndRun(src, "foo", Options.OPT);

parser/src/main/java/com/compilerprogramming/ezlang/parser/Parser.java

-5
Original file line numberDiff line numberDiff line change
@@ -334,22 +334,17 @@ private AST.Expr parseNew(Lexer lexer) {
334334
AST.TypeExpr resultType = parseTypeExpr(lexer);
335335
var newExpr = new AST.NewExpr(resultType);
336336
List<AST.Expr> initExpr = new ArrayList<>();
337-
int initType = 0;
338337
int index = 0;
339338
if (testPunctuation(lexer, "{")) {
340339
while (!isToken(currentToken, "}")) {
341340
if (currentToken.kind == Token.Kind.IDENT && lexer.peekChar() == '=') {
342-
if (initType == 0) initType = 1;
343-
else if (initType != 1) throw new CompilerException("Cannot mix initializer expressions");
344341
String fieldname = currentToken.str;
345342
nextToken(lexer);
346343
matchPunctuation(lexer, "=");
347344
AST.Expr value = parseBool(lexer);
348345
initExpr.add(new AST.InitFieldExpr(newExpr, fieldname, value));
349346
}
350347
else {
351-
if (initType == 0) initType = 2;
352-
else if (initType != 2) throw new CompilerException("Cannot mix initializer expressions");
353348
var indexLit = Integer.valueOf(index++);
354349
var indexExpr = new AST.LiteralExpr(Token.newNum(indexLit,indexLit.toString(),0));
355350
initExpr.add(new AST.ArrayInitExpr(newExpr, indexExpr, parseBool(lexer)));

parser/src/test/java/com/compilerprogramming/ezlang/parser/TestParser.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ func bar() -> Test {
3636
func main() {
3737
var m = 42
3838
var t: Tree
39-
var array = new [Int] {1,2,3}
39+
var array = new [Int] {size=10,1,2,3}
4040
array[1] = 42
4141
t.left = null
4242
if (m < 1)

seaofnodes/src/test/cases/fib/fib.ez

+9-11
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,16 @@
11
func fib(n: Int)->Int {
2-
var i: Int;
3-
var temp=0;
4-
var f1=1;
5-
var f2=1;
6-
i=n;
2+
var f1=1
3+
var f2=1
4+
var i=n
75
while( i>1 ){
8-
temp = f1+f2;
9-
f1=f2;
10-
f2=temp;
11-
i=i-1;
6+
var temp = f1+f2
7+
f1=f2
8+
f2=temp
9+
i=i-1
1210
}
13-
return f2;
11+
return f2
1412
}
1513

1614
func foo()->Int {
17-
return fib(10);
15+
return fib(10)
1816
}

0 commit comments

Comments
 (0)