From 87183667e4fba0585c770c450c51fe07a08a926f Mon Sep 17 00:00:00 2001 From: andrerb_1992 Date: Wed, 15 Mar 2017 13:55:29 -0300 Subject: [PATCH 1/6] trabalho --- src/main/cup/parser.cup | 4 ++- src/main/java/absyn/ExpAssing.java | 39 ++++++++++++++++++++++++++++++ src/main/java/absyn/ExpIf.java | 7 ++++++ src/main/jflex/lexer.jflex | 4 +-- 4 files changed, 51 insertions(+), 3 deletions(-) create mode 100644 src/main/java/absyn/ExpAssing.java create mode 100644 src/main/java/absyn/ExpIf.java diff --git a/src/main/cup/parser.cup b/src/main/cup/parser.cup index ef83e71..8187bf6 100644 --- a/src/main/cup/parser.cup +++ b/src/main/cup/parser.cup @@ -48,6 +48,7 @@ terminal LPAREN, RPAREN; terminal COMMA, SEMICOLON; terminal VAR, EQ, COLON; terminal LET, IN; +terminal ASSIGN; non terminal Exp program; non terminal Exp exp; @@ -84,6 +85,7 @@ exp ::= | var:v {: RESULT = new ExpVar(loc(vxleft,vxright), v); :} | LET:l decs:ds IN exp:b {: RESULT = new ExpLet(loc(lxleft,bxright), ds, b); :} | LPAREN:l expseq:es RPAREN:r {: RESULT = new ExpSeq(loc(lxleft,rxright), es); :} +| var:v ASSIGN exp:x {: RESULT = new ExpAssign(loc(vxleft, xxright), v, x); :} ; exps ::= @@ -118,4 +120,4 @@ decs ::= var ::= ID:v {: RESULT = new VarSimple(loc(vxleft,vxright), v); :} -; +; \ No newline at end of file diff --git a/src/main/java/absyn/ExpAssing.java b/src/main/java/absyn/ExpAssing.java new file mode 100644 index 0000000..47d19d4 --- /dev/null +++ b/src/main/java/absyn/ExpAssing.java @@ -0,0 +1,39 @@ +package absyn; + +import env.Env; +import javaslang.collection.Tree; +import parse.Loc; +import types.INT; +import types.Type; + +import static semantic.SemanticHelper.*; +import static semantic.SemanticHelper.typeMismatch; + +public class ExpAssign extends Exp { + + public final Var var; + public final Exp exp; + + + public ExpAssign(Loc loc, Var var, Exp exp) { + super(loc); + this.exp = exp; + this.var = var; + } + + @Override + public Tree.Node toTree() { + return Tree.of(annotateType("ExpAssign"), var.toTree(), exp.toTree()); + } + + @Override + protected Type semantic_(Env env) { + Type t1 = var.semantic(env); + Type t2 = exp.semantic(env); + + if (t1.is(t2)) + return t1; + else + throw typeMismatch(exp.loc, t2, t1); + } +} \ No newline at end of file diff --git a/src/main/java/absyn/ExpIf.java b/src/main/java/absyn/ExpIf.java new file mode 100644 index 0000000..a53a861 --- /dev/null +++ b/src/main/java/absyn/ExpIf.java @@ -0,0 +1,7 @@ +package absyn; + +/** + * Created by aluno on 3/15/17. + */ +public class ExpIf { +} diff --git a/src/main/jflex/lexer.jflex b/src/main/jflex/lexer.jflex index 0e40df5..3a38bd6 100644 --- a/src/main/jflex/lexer.jflex +++ b/src/main/jflex/lexer.jflex @@ -95,5 +95,5 @@ in { return tok(IN); } ";" { return tok(SEMICOLON); } ":" { return tok(COLON); } "=" { return tok(EQ); } - -. { throw error(Loc.loc(locLeft()), "unexpected char '%s'", yytext()); } +":=" { return tok(ASSIGN); } +. { throw error(Loc.loc(locLeft()), "unexpected char '%s'", yytext()); } \ No newline at end of file From e95a5e9f97cf3cf8802f9e4e1ea5a0a1713a4b62 Mon Sep 17 00:00:00 2001 From: andrerb_1992 Date: Wed, 15 Mar 2017 14:03:26 -0300 Subject: [PATCH 2/6] trabalho --- src/main/java/absyn/ExpAssign.java | 7 ++++++ src/main/java/absyn/ExpAssing.java | 39 ------------------------------ 2 files changed, 7 insertions(+), 39 deletions(-) create mode 100644 src/main/java/absyn/ExpAssign.java delete mode 100644 src/main/java/absyn/ExpAssing.java diff --git a/src/main/java/absyn/ExpAssign.java b/src/main/java/absyn/ExpAssign.java new file mode 100644 index 0000000..be227a6 --- /dev/null +++ b/src/main/java/absyn/ExpAssign.java @@ -0,0 +1,7 @@ +package absyn; + +/** + * Created by aluno on 3/15/17. + */ +public class ExpAssign { +} diff --git a/src/main/java/absyn/ExpAssing.java b/src/main/java/absyn/ExpAssing.java deleted file mode 100644 index 47d19d4..0000000 --- a/src/main/java/absyn/ExpAssing.java +++ /dev/null @@ -1,39 +0,0 @@ -package absyn; - -import env.Env; -import javaslang.collection.Tree; -import parse.Loc; -import types.INT; -import types.Type; - -import static semantic.SemanticHelper.*; -import static semantic.SemanticHelper.typeMismatch; - -public class ExpAssign extends Exp { - - public final Var var; - public final Exp exp; - - - public ExpAssign(Loc loc, Var var, Exp exp) { - super(loc); - this.exp = exp; - this.var = var; - } - - @Override - public Tree.Node toTree() { - return Tree.of(annotateType("ExpAssign"), var.toTree(), exp.toTree()); - } - - @Override - protected Type semantic_(Env env) { - Type t1 = var.semantic(env); - Type t2 = exp.semantic(env); - - if (t1.is(t2)) - return t1; - else - throw typeMismatch(exp.loc, t2, t1); - } -} \ No newline at end of file From 09dfa50fe38926189960475c7324cf42f2fc209d Mon Sep 17 00:00:00 2001 From: andrerb_1992 Date: Wed, 15 Mar 2017 14:09:04 -0300 Subject: [PATCH 3/6] cup --- src/main/cup/parser.cup | 34 +++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/src/main/cup/parser.cup b/src/main/cup/parser.cup index 8187bf6..dfc1472 100644 --- a/src/main/cup/parser.cup +++ b/src/main/cup/parser.cup @@ -49,6 +49,7 @@ terminal COMMA, SEMICOLON; terminal VAR, EQ, COLON; terminal LET, IN; terminal ASSIGN; +terminal IF, THEN, ELSE; non terminal Exp program; non terminal Exp exp; @@ -63,6 +64,7 @@ precedence left AND; precedence left PLUS, MINUS; precedence left TIMES, DIV; precedence left UMINUS; +precedence nonassoc ELSE; start with program; @@ -71,21 +73,23 @@ program ::= ; exp ::= - exp:x PLUS exp:y {: RESULT = new ExpBinOp(loc(xxleft,yxright), ExpBinOp.Op.PLUS, x, y); :} -| exp:x MINUS exp:y {: RESULT = new ExpBinOp(loc(xxleft,yxright), ExpBinOp.Op.MINUS, x, y); :} -| exp:x TIMES exp:y {: RESULT = new ExpBinOp(loc(xxleft,yxright), ExpBinOp.Op.TIMES, x, y); :} -| exp:x DIV exp:y {: RESULT = new ExpBinOp(loc(xxleft,yxright), ExpBinOp.Op.DIV, x, y); :} -| exp:x AND exp:y {: RESULT = new ExpBinOp(loc(xxleft,yxright), ExpBinOp.Op.AND, x, y); :} -| exp:x OR exp:y {: RESULT = new ExpBinOp(loc(xxleft,yxright), ExpBinOp.Op.OR, x, y); :} -| LITINT:x {: RESULT = new ExpInt(loc(xxleft,xxright), x); :} -| LITREAL:x {: RESULT = new ExpReal(loc(xxleft,xxright), x); :} -| LITBOOL:x {: RESULT = new ExpBool(loc(xxleft,xxright), x); :} -| MINUS:m exp:x {: RESULT = new ExpNegate(loc(mxleft,xxright), x); :} %prec UMINUS -| ID:f LPAREN exps:x RPAREN:r {: RESULT = new ExpCall(loc(fxleft,rxright), f, x); :} -| var:v {: RESULT = new ExpVar(loc(vxleft,vxright), v); :} -| LET:l decs:ds IN exp:b {: RESULT = new ExpLet(loc(lxleft,bxright), ds, b); :} -| LPAREN:l expseq:es RPAREN:r {: RESULT = new ExpSeq(loc(lxleft,rxright), es); :} -| var:v ASSIGN exp:x {: RESULT = new ExpAssign(loc(vxleft, xxright), v, x); :} + exp:x PLUS exp:y {: RESULT = new ExpBinOp(loc(xxleft,yxright), ExpBinOp.Op.PLUS, x, y); :} +| exp:x MINUS exp:y {: RESULT = new ExpBinOp(loc(xxleft,yxright), ExpBinOp.Op.MINUS, x, y); :} +| exp:x TIMES exp:y {: RESULT = new ExpBinOp(loc(xxleft,yxright), ExpBinOp.Op.TIMES, x, y); :} +| exp:x DIV exp:y {: RESULT = new ExpBinOp(loc(xxleft,yxright), ExpBinOp.Op.DIV, x, y); :} +| exp:x AND exp:y {: RESULT = new ExpBinOp(loc(xxleft,yxright), ExpBinOp.Op.AND, x, y); :} +| exp:x OR exp:y {: RESULT = new ExpBinOp(loc(xxleft,yxright), ExpBinOp.Op.OR, x, y); :} +| LITINT:x {: RESULT = new ExpInt(loc(xxleft,xxright), x); :} +| LITREAL:x {: RESULT = new ExpReal(loc(xxleft,xxright), x); :} +| LITBOOL:x {: RESULT = new ExpBool(loc(xxleft,xxright), x); :} +| MINUS:m exp:x {: RESULT = new ExpNegate(loc(mxleft,xxright), x); :} %prec UMINUS +| ID:f LPAREN exps:x RPAREN:r {: RESULT = new ExpCall(loc(fxleft,rxright), f, x); :} +| var:v {: RESULT = new ExpVar(loc(vxleft,vxright), v); :} +| var:v ASSIGN exp:e {: RESULT = new ExpAssign(loc(vxleft,exright), v, e); :} +| LET:l decs:ds IN exp:b {: RESULT = new ExpLet(loc(lxleft,bxright), ds, b); :} +| LPAREN:l expseq:es RPAREN:r {: RESULT = new ExpSeq(loc(lxleft,rxright), es); :} +| IF:i exp:t THEN exp:a ELSE exp:b {: RESULT = new ExpIf(loc(ixleft,bxright), t, a, b); :} +| IF:i exp:t THEN exp:a {: RESULT = new ExpIf(loc(ixleft,axright), t, a, null); :} ; exps ::= From 2d7a780fc9b854a0b7b39a125f3cd859da67f4b0 Mon Sep 17 00:00:00 2001 From: andrerb_1992 Date: Wed, 15 Mar 2017 14:11:46 -0300 Subject: [PATCH 4/6] eplan_comp --- src/main/java/absyn/ExpAssign.java | 39 ++++++++++++++++++--- src/main/java/absyn/ExpIf.java | 54 +++++++++++++++++++++++++++--- src/main/jflex/lexer.jflex | 4 +++ 3 files changed, 87 insertions(+), 10 deletions(-) diff --git a/src/main/java/absyn/ExpAssign.java b/src/main/java/absyn/ExpAssign.java index be227a6..25d3260 100644 --- a/src/main/java/absyn/ExpAssign.java +++ b/src/main/java/absyn/ExpAssign.java @@ -1,7 +1,36 @@ package absyn; -/** - * Created by aluno on 3/15/17. - */ -public class ExpAssign { -} +import env.Env; +import javaslang.collection.Tree; +import parse.Loc; +import types.Type; + +import static semantic.SemanticHelper.typeMismatch; + +public class ExpAssign extends Exp { + + public final Var var; + public final Exp exp; + + public ExpAssign(Loc loc, Var var, Exp exp) { + super(loc); + this.var = var; + this.exp = exp; + } + + @Override + public Tree.Node toTree() { + return Tree.of(annotateType("ExpAssign"), + var.toTree(), + exp.toTree()); + } + + @Override + protected Type semantic_(Env env) { + Type t_var = var.semantic(env); + Type t_exp = exp.semantic(env); + if (!t_exp.is(t_var)) + throw typeMismatch(exp.loc, t_exp, t_var); + return t_var; + } +} \ No newline at end of file diff --git a/src/main/java/absyn/ExpIf.java b/src/main/java/absyn/ExpIf.java index a53a861..2ba6632 100644 --- a/src/main/java/absyn/ExpIf.java +++ b/src/main/java/absyn/ExpIf.java @@ -1,7 +1,51 @@ package absyn; -/** - * Created by aluno on 3/15/17. - */ -public class ExpIf { -} +import env.Env; +import javaslang.collection.List; +import javaslang.collection.Tree; +import parse.Loc; +import types.*; + +import static semantic.SemanticHelper.typeMismatch; + +public class ExpIf extends Exp { + + public final Exp test; + public final Exp alt1; + public final Exp alt2; + + public ExpIf(Loc loc, Exp test, Exp alt1, Exp alt2) { + super(loc); + this.test = test; + this.alt1 = alt1; + this.alt2 = alt2; + } + + @Override + public Tree.Node toTree() { + List> children = List.of(test.toTree(), alt1.toTree()); + if (alt2 != null) + children = children.append(alt2.toTree()); + return Tree.of(annotateType("ExpIf: "), children); + } + + @Override + protected Type semantic_(Env env) { + final Type t_test = test.semantic(env); + if (!t_test.is(BOOL.T)) + throw typeMismatch(test.loc, t_test, BOOL.T); + final Type t_alt1 = alt1.semantic(env); + if (alt2 == null) { + if (!t_alt1.is(UNIT.T)) + throw typeMismatch(alt1.loc, t_alt1, UNIT.T); + return UNIT.T; + } + final Type t_alt2 = alt2.semantic(env); + if (t_alt2.is(t_alt1)) + return t_alt1; + if (t_alt1.is(t_alt2)) + return t_alt2; + throw typeMismatch(alt2.loc, t_alt2, t_alt1); + } + +} \ No newline at end of file diff --git a/src/main/jflex/lexer.jflex b/src/main/jflex/lexer.jflex index 3a38bd6..c212f6f 100644 --- a/src/main/jflex/lexer.jflex +++ b/src/main/jflex/lexer.jflex @@ -80,6 +80,9 @@ id = [a-zA-Z][a-zA-Z0-9_]* var { return tok(VAR); } let { return tok(LET); } in { return tok(IN); } +if { return tok(IF); } +then { return tok(THEN); } +else { return tok(ELSE); } {id} { return tok(ID, yytext().intern()); } @@ -96,4 +99,5 @@ in { return tok(IN); } ":" { return tok(COLON); } "=" { return tok(EQ); } ":=" { return tok(ASSIGN); } + . { throw error(Loc.loc(locLeft()), "unexpected char '%s'", yytext()); } \ No newline at end of file From fc90e2ff643ee8557a8735b9a4d4bc1b70d26780 Mon Sep 17 00:00:00 2001 From: andrerb_1992 Date: Fri, 31 Mar 2017 18:07:49 -0300 Subject: [PATCH 5/6] trabalhoAndre --- src/main/java/absyn/DecFunction.java | 7 +++++++ src/main/java/absyn/DecFunctionMutual.java | 7 +++++++ src/main/java/absyn/DecType.java | 7 +++++++ src/main/java/absyn/DecTypeMutual.java | 7 +++++++ src/main/java/absyn/ExpArray.java | 7 +++++++ src/main/java/absyn/ExpBreak.java | 7 +++++++ src/main/java/absyn/ExpRecord.java | 7 +++++++ src/main/java/absyn/ExpWhile.java | 7 +++++++ src/main/java/absyn/Param.java | 7 +++++++ src/main/java/absyn/ParamAssign.java | 7 +++++++ src/main/java/absyn/Ty.java | 7 +++++++ src/main/java/absyn/TyArray.java | 7 +++++++ src/main/java/absyn/TyName.java | 7 +++++++ src/main/java/absyn/TyRecord.java | 7 +++++++ src/main/java/absyn/VarField.java | 7 +++++++ src/main/java/absyn/VarSubscript.java | 7 +++++++ src/main/java/types/ARRAY.java | 7 +++++++ src/main/java/types/RECORD.java | 7 +++++++ 18 files changed, 126 insertions(+) create mode 100644 src/main/java/absyn/DecFunction.java create mode 100644 src/main/java/absyn/DecFunctionMutual.java create mode 100644 src/main/java/absyn/DecType.java create mode 100644 src/main/java/absyn/DecTypeMutual.java create mode 100644 src/main/java/absyn/ExpArray.java create mode 100644 src/main/java/absyn/ExpBreak.java create mode 100644 src/main/java/absyn/ExpRecord.java create mode 100644 src/main/java/absyn/ExpWhile.java create mode 100644 src/main/java/absyn/Param.java create mode 100644 src/main/java/absyn/ParamAssign.java create mode 100644 src/main/java/absyn/Ty.java create mode 100644 src/main/java/absyn/TyArray.java create mode 100644 src/main/java/absyn/TyName.java create mode 100644 src/main/java/absyn/TyRecord.java create mode 100644 src/main/java/absyn/VarField.java create mode 100644 src/main/java/absyn/VarSubscript.java create mode 100644 src/main/java/types/ARRAY.java create mode 100644 src/main/java/types/RECORD.java diff --git a/src/main/java/absyn/DecFunction.java b/src/main/java/absyn/DecFunction.java new file mode 100644 index 0000000..614549e --- /dev/null +++ b/src/main/java/absyn/DecFunction.java @@ -0,0 +1,7 @@ +package absyn; + +/** + * Created by aluno on 3/31/17. + */ +public class DecFunction { +} diff --git a/src/main/java/absyn/DecFunctionMutual.java b/src/main/java/absyn/DecFunctionMutual.java new file mode 100644 index 0000000..4ee6ea5 --- /dev/null +++ b/src/main/java/absyn/DecFunctionMutual.java @@ -0,0 +1,7 @@ +package absyn; + +/** + * Created by aluno on 3/31/17. + */ +public class DecFunctionMutual { +} diff --git a/src/main/java/absyn/DecType.java b/src/main/java/absyn/DecType.java new file mode 100644 index 0000000..646a031 --- /dev/null +++ b/src/main/java/absyn/DecType.java @@ -0,0 +1,7 @@ +package absyn; + +/** + * Created by aluno on 3/15/17. + */ +public class DecType { +} diff --git a/src/main/java/absyn/DecTypeMutual.java b/src/main/java/absyn/DecTypeMutual.java new file mode 100644 index 0000000..52c2378 --- /dev/null +++ b/src/main/java/absyn/DecTypeMutual.java @@ -0,0 +1,7 @@ +package absyn; + +/** + * Created by aluno on 3/20/17. + */ +public class DecTypeMutual { +} diff --git a/src/main/java/absyn/ExpArray.java b/src/main/java/absyn/ExpArray.java new file mode 100644 index 0000000..015dfbc --- /dev/null +++ b/src/main/java/absyn/ExpArray.java @@ -0,0 +1,7 @@ +package absyn; + +/** + * Created by aluno on 3/31/17. + */ +public class ExpArray { +} diff --git a/src/main/java/absyn/ExpBreak.java b/src/main/java/absyn/ExpBreak.java new file mode 100644 index 0000000..c0ff12b --- /dev/null +++ b/src/main/java/absyn/ExpBreak.java @@ -0,0 +1,7 @@ +package absyn; + +/** + * Created by aluno on 3/31/17. + */ +public class ExpBreak { +} diff --git a/src/main/java/absyn/ExpRecord.java b/src/main/java/absyn/ExpRecord.java new file mode 100644 index 0000000..fe53e96 --- /dev/null +++ b/src/main/java/absyn/ExpRecord.java @@ -0,0 +1,7 @@ +package absyn; + +/** + * Created by aluno on 3/31/17. + */ +public class ExpRecord { +} diff --git a/src/main/java/absyn/ExpWhile.java b/src/main/java/absyn/ExpWhile.java new file mode 100644 index 0000000..7ce0b73 --- /dev/null +++ b/src/main/java/absyn/ExpWhile.java @@ -0,0 +1,7 @@ +package absyn; + +/** + * Created by aluno on 3/31/17. + */ +public class ExpWhile { +} diff --git a/src/main/java/absyn/Param.java b/src/main/java/absyn/Param.java new file mode 100644 index 0000000..0db9fc1 --- /dev/null +++ b/src/main/java/absyn/Param.java @@ -0,0 +1,7 @@ +package absyn; + +/** + * Created by aluno on 3/31/17. + */ +public class Param { +} diff --git a/src/main/java/absyn/ParamAssign.java b/src/main/java/absyn/ParamAssign.java new file mode 100644 index 0000000..216cece --- /dev/null +++ b/src/main/java/absyn/ParamAssign.java @@ -0,0 +1,7 @@ +package absyn; + +/** + * Created by aluno on 3/31/17. + */ +public class ParamAssign { +} diff --git a/src/main/java/absyn/Ty.java b/src/main/java/absyn/Ty.java new file mode 100644 index 0000000..0db587b --- /dev/null +++ b/src/main/java/absyn/Ty.java @@ -0,0 +1,7 @@ +package absyn; + +/** + * Created by aluno on 3/15/17. + */ +public class Ty { +} diff --git a/src/main/java/absyn/TyArray.java b/src/main/java/absyn/TyArray.java new file mode 100644 index 0000000..10b3313 --- /dev/null +++ b/src/main/java/absyn/TyArray.java @@ -0,0 +1,7 @@ +package absyn; + +/** + * Created by aluno on 3/31/17. + */ +public class TyArray { +} diff --git a/src/main/java/absyn/TyName.java b/src/main/java/absyn/TyName.java new file mode 100644 index 0000000..106588f --- /dev/null +++ b/src/main/java/absyn/TyName.java @@ -0,0 +1,7 @@ +package absyn; + +/** + * Created by aluno on 3/15/17. + */ +public class TyName { +} diff --git a/src/main/java/absyn/TyRecord.java b/src/main/java/absyn/TyRecord.java new file mode 100644 index 0000000..1ac3af4 --- /dev/null +++ b/src/main/java/absyn/TyRecord.java @@ -0,0 +1,7 @@ +package absyn; + +/** + * Created by aluno on 3/31/17. + */ +public class TyRecord { +} diff --git a/src/main/java/absyn/VarField.java b/src/main/java/absyn/VarField.java new file mode 100644 index 0000000..d2a147d --- /dev/null +++ b/src/main/java/absyn/VarField.java @@ -0,0 +1,7 @@ +package absyn; + +/** + * Created by aluno on 3/31/17. + */ +public class VarField { +} diff --git a/src/main/java/absyn/VarSubscript.java b/src/main/java/absyn/VarSubscript.java new file mode 100644 index 0000000..948712c --- /dev/null +++ b/src/main/java/absyn/VarSubscript.java @@ -0,0 +1,7 @@ +package absyn; + +/** + * Created by aluno on 3/31/17. + */ +public class VarSubscript { +} diff --git a/src/main/java/types/ARRAY.java b/src/main/java/types/ARRAY.java new file mode 100644 index 0000000..61ff7ea --- /dev/null +++ b/src/main/java/types/ARRAY.java @@ -0,0 +1,7 @@ +package types; + +/** + * Created by aluno on 3/31/17. + */ +public class ARRAY { +} diff --git a/src/main/java/types/RECORD.java b/src/main/java/types/RECORD.java new file mode 100644 index 0000000..410d6e6 --- /dev/null +++ b/src/main/java/types/RECORD.java @@ -0,0 +1,7 @@ +package types; + +/** + * Created by aluno on 3/31/17. + */ +public class RECORD { +} From bc24baee12efda9cc63acc930fd9331697a3af3c Mon Sep 17 00:00:00 2001 From: andrerb_1992 Date: Tue, 4 Apr 2017 16:55:49 -0300 Subject: [PATCH 6/6] andre --- eplan/.gitignore | 27 + eplan/.ide/IntelliJIdea2016.2-settings.jar | Bin 0 -> 1307 bytes eplan/.ide/README.md | 6 + eplan/LICENSE | 21 + eplan/README.md | 211 +++ eplan/doc/eplan-compiler.tex | 1563 +++++++++++++++++ eplan/doc/images/tree.dot | 22 + eplan/doc/images/tree.png | Bin 0 -> 44034 bytes eplan/driver | 12 + eplan/eplan-compiler.pdf | Bin 0 -> 190282 bytes eplan/images/fork.png | Bin 0 -> 119488 bytes eplan/pom.xml | 145 ++ eplan/run | 21 + eplan/src/main/cup/parser.cup | 121 ++ eplan/src/main/java/absyn/AST.java | 22 + eplan/src/main/java/absyn/Dec.java | 16 + eplan/src/main/java/absyn/DecVar.java | 46 + eplan/src/main/java/absyn/Exp.java | 30 + eplan/src/main/java/absyn/ExpBinOp.java | 74 + eplan/src/main/java/absyn/ExpBool.java | 27 + eplan/src/main/java/absyn/ExpCall.java | 73 + eplan/src/main/java/absyn/ExpInt.java | 27 + eplan/src/main/java/absyn/ExpLet.java | 38 + eplan/src/main/java/absyn/ExpNegate.java | 37 + eplan/src/main/java/absyn/ExpReal.java | 27 + eplan/src/main/java/absyn/ExpSeq.java | 33 + eplan/src/main/java/absyn/ExpVar.java | 28 + eplan/src/main/java/absyn/Var.java | 30 + eplan/src/main/java/absyn/VarSimple.java | 32 + eplan/src/main/java/env/Env.java | 41 + eplan/src/main/java/env/Table.java | 83 + eplan/src/main/java/error/CompilerError.java | 18 + eplan/src/main/java/error/ErrorHelper.java | 23 + eplan/src/main/java/error/FatalError.java | 13 + eplan/src/main/java/main/Driver.java | 189 ++ eplan/src/main/java/main/SemantGui.java | 278 +++ eplan/src/main/java/parse/Loc.java | 64 + .../main/java/semantic/SemanticHelper.java | 40 + eplan/src/main/java/types/BOOL.java | 14 + eplan/src/main/java/types/FUNCTION.java | 29 + eplan/src/main/java/types/INT.java | 14 + eplan/src/main/java/types/REAL.java | 14 + eplan/src/main/java/types/Type.java | 33 + eplan/src/main/java/types/UNIT.java | 15 + eplan/src/main/jflex/lexer.jflex | 99 ++ eplan/src/test/java/Test/SemantTest.java | 92 + eplan/tests/test-lexer-01.eplan | 3 + 47 files changed, 3751 insertions(+) create mode 100644 eplan/.gitignore create mode 100644 eplan/.ide/IntelliJIdea2016.2-settings.jar create mode 100644 eplan/.ide/README.md create mode 100644 eplan/LICENSE create mode 100644 eplan/README.md create mode 100644 eplan/doc/eplan-compiler.tex create mode 100644 eplan/doc/images/tree.dot create mode 100644 eplan/doc/images/tree.png create mode 100755 eplan/driver create mode 100644 eplan/eplan-compiler.pdf create mode 100644 eplan/images/fork.png create mode 100644 eplan/pom.xml create mode 100755 eplan/run create mode 100644 eplan/src/main/cup/parser.cup create mode 100644 eplan/src/main/java/absyn/AST.java create mode 100644 eplan/src/main/java/absyn/Dec.java create mode 100644 eplan/src/main/java/absyn/DecVar.java create mode 100644 eplan/src/main/java/absyn/Exp.java create mode 100644 eplan/src/main/java/absyn/ExpBinOp.java create mode 100644 eplan/src/main/java/absyn/ExpBool.java create mode 100644 eplan/src/main/java/absyn/ExpCall.java create mode 100644 eplan/src/main/java/absyn/ExpInt.java create mode 100644 eplan/src/main/java/absyn/ExpLet.java create mode 100644 eplan/src/main/java/absyn/ExpNegate.java create mode 100644 eplan/src/main/java/absyn/ExpReal.java create mode 100644 eplan/src/main/java/absyn/ExpSeq.java create mode 100644 eplan/src/main/java/absyn/ExpVar.java create mode 100644 eplan/src/main/java/absyn/Var.java create mode 100644 eplan/src/main/java/absyn/VarSimple.java create mode 100644 eplan/src/main/java/env/Env.java create mode 100644 eplan/src/main/java/env/Table.java create mode 100644 eplan/src/main/java/error/CompilerError.java create mode 100644 eplan/src/main/java/error/ErrorHelper.java create mode 100644 eplan/src/main/java/error/FatalError.java create mode 100644 eplan/src/main/java/main/Driver.java create mode 100644 eplan/src/main/java/main/SemantGui.java create mode 100644 eplan/src/main/java/parse/Loc.java create mode 100644 eplan/src/main/java/semantic/SemanticHelper.java create mode 100644 eplan/src/main/java/types/BOOL.java create mode 100644 eplan/src/main/java/types/FUNCTION.java create mode 100644 eplan/src/main/java/types/INT.java create mode 100644 eplan/src/main/java/types/REAL.java create mode 100644 eplan/src/main/java/types/Type.java create mode 100644 eplan/src/main/java/types/UNIT.java create mode 100644 eplan/src/main/jflex/lexer.jflex create mode 100644 eplan/src/test/java/Test/SemantTest.java create mode 100644 eplan/tests/test-lexer-01.eplan diff --git a/eplan/.gitignore b/eplan/.gitignore new file mode 100644 index 0000000..d2f30a1 --- /dev/null +++ b/eplan/.gitignore @@ -0,0 +1,27 @@ +# -- Java +# -- virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* + +# -- Maven +target/* + +# -- IntelliJ IDEA +.idea +*.iml + +# Latex build +doc/_build + +# -- Emacs +*~ + +# output of running the eplan compiler +tests/*.dot* +tests/*.exe +tests/*.ll +tests/*.s + +unknown.dot* +unknown.exe +unknown.ll +unknown.s diff --git a/eplan/.ide/IntelliJIdea2016.2-settings.jar b/eplan/.ide/IntelliJIdea2016.2-settings.jar new file mode 100644 index 0000000000000000000000000000000000000000..ae1f78fc545b0eeeffa65cc05d1658e59387a206 GIT binary patch literal 1307 zcmWIWW@h1HVBlb25DRzrWIzJkKz4F|N@{UQWln0begIIR2m=QP2Zll^RD~|7X^Evd zB?|F|@p=`xIa{X&`X4e7IDY@H$mw}sGNptcA2!guz4L0x-AiID@v~UDCiNty%=qzk z@4*8K$~`OnClu}ffA@b?_??SMIbVvtWIa1}>hjK)H}=h3vU<%1z5I1=+PO~`iRT~9 znHawRm=?=I&F_ucvg%#OV%8lt_@I0?Eba4O^)SXs`x4s(9YSw(!yms|A04b8XwYySXDYsaixXn~m{fTU67b z-#kl}1qyMq{_|T}5ue*#IM?fhZhDZ|{FxJ%X{7xu$xO|(i(MMbGS6fFjnbD53$ta! z`OeP@fiQIvDn_xeBfBo z+r-edDZ4T}7R+ZkQuX*&hJfZrg+rd%&Wl^`Pj9$;;EUoE?q}H&Doh(zERNb-lk-U_ zPFwH)ql;FLpRTNQ{MKciz3_XkCHuaZ=Lz%u@+9*X{f)1+`nlu&*381-$FmQ=l7Ih@ zJHVTrW63^Fi7ku_4FA~}7!Yxvp?k^$DUC450Xg{vC7Jno#rmMcq6bbbdd0~Zsky1e zp!nbHsiSe?q>rD@$us9SKMo4m;Cb%6?uql>XSD-Qc%Sjz8d`MD-;-BwOSWYapY&+xKkB`+^m(O2$H{<3ccUrT$x7k?=Y4bt#Fqse+|=aOZr z)1FPy$dJg=(tOdp_EP)p)Z?j(``-uv-OSGMy648K3ZM(80Wrc4qAjQiofjyZnO9tr zn3I#5qE}K;B74%2uR(!_<$!hn&Fw!}uPj^V;LUa9$o1J4*E9DCU#~bAY&2zZmfR#8 zku92AKe?^<&SchgxBR=&MAEfj&Az{r?Lcu;>a;Smg1p!_H%|eMKbgdwz iurLAzD*~i46A0u0Z&qL`XJB9j!eC&U-vrdazyJW$$go8K literal 0 HcmV?d00001 diff --git a/eplan/.ide/README.md b/eplan/.ide/README.md new file mode 100644 index 0000000..9fd808b --- /dev/null +++ b/eplan/.ide/README.md @@ -0,0 +1,6 @@ +IntelliJ IDEA +------------- + +The following IntelliJ IDEA settings are exported (File/Export Setting): + +* Code Style diff --git a/eplan/LICENSE b/eplan/LICENSE new file mode 100644 index 0000000..f08d0d8 --- /dev/null +++ b/eplan/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2016 José Romildo Malaquias + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/eplan/README.md b/eplan/README.md new file mode 100644 index 0000000..cc05cca --- /dev/null +++ b/eplan/README.md @@ -0,0 +1,211 @@ +# EPLan + +EPLan is an educational programming language for compiler construction +teaching. + +EPlan is used to teach compilation techniques to undergraduate students +at Universidade Federal de Ouro. The language specification starts with +a very minimal kernel and grows with new features as new techniques are +learnt. + +Tags will be used to give access to each important stage of the +compiler implementation. + +## Development tools needed + +- [GIT](https://git-scm.com/) +- [Java development kit](http://www.oracle.com/technetwork/java/javase/downloads/) (version 1.8 or greater) +- C compiler +- [Maven](https://maven.apache.org/) +- Text editor for software development (Suggested: [Atom](https://atom.io/), [Notepad++](https://notepad-plus-plus.org/), gedit, [Emacs](https://www.gnu.org/software/emacs/)) +- IDE for Java development (optional) (suggested: [IntelliJ IDEA](https://www.jetbrains.com/idea/)) + +## Notice about using Windows + +One of the library dependencies of the project (`javacpp-presets-llvm`) +currently is not available for Windows, and because of that the Windows +platform is not supported at the moment. + +## Initial setup to work with EPlan in BCC328 + +In order to develop the activities of the BCC328 (Compiler Construction) course you should: + +- Have a [github](https://github.com/) account. If you do not have one, visit the github site and [sign up](https://github.com/join). +- [Log in](https://github.com/login) the github. +- Visit the [EPLan](https://github.com/romildo/eplan) project page. +- Fork the EPlan project. +![forking](images/fork.png) +- In your computer clone your fork of the eplan project. Notice that in the commands that follow any text written between angular braces `<>` shold be replaced by an appropriate text. For instance ` +$ git clone https://github.com/romildo/eplan.git +$ cd eplan +``` +- Set the remote repository for your clone +``` +$ git remote add upstream https://github.com/romildo/eplan.git +$ git remote -v +``` + +## When testing a version of the eplan compiler + +- Change your working directory to the folder containing your clone. +``` +$ cd +``` +- Select the master branch of the clone of your forked project. +``` +$ git branch +$ git checkout master +``` +- Pull the latest changes from the remote repository. +``` +$ git pull upstream master +``` +- Select the appropriate branch for the activity. +``` +$ git checkout -b +``` +- Develop the activity. + +## To submit an activity + +- Select the master branch of the clone of your forked project. +``` +$ cd +$ git checkout master +``` +- Pull the latest changes from the remote repository. +``` +$ git pull upstream master +``` +- Create a new branch where you will develop the activity. +``` +$ git checkout -b +``` +- Develop the activity. +- See the status of your cloned repository: +``` +git status +``` +- Add any new or modified file to the revision history: +``` +git add +``` +- Commit the changes: +``` +git commit -m +``` +- Push your changes to your forked project. +``` +git push origin +``` +- Make a pull request (PR) from your forked project at github. + +## Some useful commands + +### To remove the generated files + +``` +$ mvn clean +``` + +### To compile the project + +``` +$ mvn compile + +``` + +### To make `jar` files of the project + +``` +$ mvn package +``` + +### To run the eplan compiler + +The EPlan compiler accepts some command line options. A summary of its +usage can be obtained with the `--help` option: + +``` +$ java -jar target/uber-eplan-0.1-SNAPSHOT.jar --help +``` + +Run the EPLan compiler with the command line: + +``` +$ java -jar target/uber-eplan-0.1-SNAPSHOT.jar [options] [file] +``` + +Or you may use the provided shell script `driver`: + +``` +$ ./driver +``` + +There is also the `run` script, which runs the compiler on the standard +input, and generates and runs the executable. It also shows the image of +the abstract syntax tree. For that the +[Graphviz](http://www.graphviz.org/) package is needed. + +``` +$ ./run +``` + +The current version of the library `javacpp-presets-llvm` is based on a +LLVM release that has an issue regarding floating point constants in the +LLVM IR language. It follows the locale setting for numeric formatting +and at the same time it does not accept a comma instead of a dot in the +literal. You may have to set you locale numeric setting to `en_US-UTF-8` +for it to work. + +``` +$ LC_NUMERIC=en_US-UTF-8 java -jar target/uber-eplan-0.1-SNAPSHOT.jar [options] [file] +``` + +or with the provided shell script `driver`: + +``` +$ LC_NUMERIC=en_US-UTF-8 ./driver +``` + +A better alternative may be setting your language to `en_US-UTF-8` in +the system configuration. + +The generated LLVM intermediate representation code should be compiled +with the `llc`: + +``` +$ llc .ll +``` + +The generated assembly code and the runtime library should be compiled and linked with a C compiler. If using CLang: + +``` +$ clang -o .exe src/main/c/bindings.c .s +``` + +Or if using GCC: + +``` +$ gcc -o .exe .s src/main/c/bindings.c +``` + +To get an image of the syntact tree of your program: + +``` +$ dot -O -Tpng .dot .dot +$ eog .dot.png +``` + +Finally run the binary obtained for the eplan source code: + +``` +$ ./.exe +``` + +These steps can be combined in a single command line: +``` +$ F= && ./driver $F && llc $F.ll && clang -o $F.exe $F.s src/main/c/bindings.c && dot -O -Tpng $F.dot && eog $F*png && ./$F.exe +``` diff --git a/eplan/doc/eplan-compiler.tex b/eplan/doc/eplan-compiler.tex new file mode 100644 index 0000000..33119f5 --- /dev/null +++ b/eplan/doc/eplan-compiler.tex @@ -0,0 +1,1563 @@ +\documentclass[smaller]{beamer} + +\usepackage{iftex} + +\RequireLuaTeX + +\usepackage[]{fontspec} +\usepackage[brazilian]{babel} + +\usepackage{dirtree} +\usepackage{tikz-qtree} +\usepackage{syntax} +\usepackage{pygmentex} +% \usepackage{jrmmisc} +\usepackage{tcolorbox} +\usepackage{relsize} +\usepackage{indentfirst} + +% \setmainfont{Times New Roman} +% \setsansfont[Scale=MatchLowercase]{Helvetica} +% \setmonofont[Scale=MatchLowercase]{Courier} + +% \setmainfont{Times New Roman} +% \setsansfont[Scale=MatchLowercase]{Helvetica LT Std} +% \setmonofont[Scale=MatchLowercase]{Courier Std} + +% \setmainfont{DejaVu Serif} +% \setsansfont[Scale=MatchLowercase]{DejaVu Sans} +% \setmonofont[Scale=MatchLowercase]{DejaVu Sans Mono} + +\setmainfont{Liberation Serif} +\setsansfont[Scale=MatchLowercase]{Liberation Sans} +\setmonofont[Scale=MatchLowercase]{Liberation Mono} + +% \setmainfont{Lucida Std} +% \setsansfont[Scale=MatchLowercase]{Lucida Sans Std} +% \setmonofont[Scale=MatchLowercase]{Lucida Sans Typewriter Std} +% % \setmonofont[Scale=MatchLowercase]{Lucida Typewriter Std} + +% \setmainfont{Luxi Serif} +% \setsansfont[Scale=MatchLowercase]{Luxi Sans} +% \setmonofont[Scale=MatchLowercase]{Luxi Mono} + +% \setmainfont{Nimbus Roman No9 L} +% \setsansfont[Scale=MatchLowercase]{Nimbus Sans L} +% \setmonofont[Scale=MatchLowercase]{Nimbus Mono L} + +% \setmainfont{Droid Serif} +% \setsansfont[Scale=MatchLowercase]{Droid Sans} +% \setmonofont[Scale=MatchLowercase]{Droid Sans Mono} % no bold + +% \setmonofont[Scale=MatchLowercase]{Anonymous Pro} +% \setmonofont[Scale=MatchLowercase]{Consolas} +% \setmonofont[Scale=MatchLowercase]{Courier New} +% \setmonofont[Scale=MatchLowercase]{Cousine} +% \setmonofont[Scale=MatchLowercase]{DejaVu Sans Mono} +% \setmonofont[Scale=MatchLowercase]{Fantasque Sans Mono} +% \setmonofont[Scale=MatchLowercase]{Fira Code} +% \setmonofont[Scale=MatchLowercase]{Fira Mono} +% \setmonofont[Scale=MatchLowercase]{FreeMono} +% \setmonofont[Scale=MatchLowercase]{Hack} +% \setmonofont[Scale=MatchLowercase]{Input Mono Condensed} +% \setmonofont[Scale=MatchLowercase]{Iosevka Slab} +% \setmonofont[Scale=MatchLowercase]{Iosevka} +% \setmonofont[Scale=MatchLowercase]{Liberation Mono} +% \setmonofont[Scale=MatchLowercase]{Noto Mono} +% \setmonofont[Scale=MatchLowercase]{Source Code Pro} +% \setmonofont[Scale=MatchLowercase]{SF Mono} +% \setmonofont[Scale=MatchLowercase]{Ubuntu Mono} +\setmonofont[Scale=MatchLowercase]{M+ 1m} +% % +% \setmonofont[Scale=MatchLowercase]{Letter Gothic Std} +% \setmonofont[Scale=MatchLowercase]{Lucida Sans Typewriter Std} +% \setmonofont[Scale=MatchLowercase]{Luxi Mono} + + +\setbeamercovered{transparent} +\hypersetup{colorlinks} +\usetheme{OuroPreto} + +\newenvironment{tips}{% + \textbf{Dicas:}\newline + \begin{list}{*}{% + \setlength{\topsep}{0pt}% + \setlength{\itemsep}{0pt}% + \setlength{\parsep}{0pt}% + }% + }{% + \end{list}% +} + +\usetikzlibrary{ + calc, + shapes.multipart, + chains, + arrows, + graphs, + graphdrawing, +} + +\usegdlibrary{ + layered +} + +\tikzset{ + joined/.style = { + join=by ->, + }, + cons/.style = { + draw, + rounded corners, + rectangle split, + rectangle split parts=2, + rectangle split horizontal, + joined, + }, + var/.style = { + blue, + joined, + }, + null/.style = { + fill, + circle, + inner sep=0mm, + minimum size=2mm, + joined, + }, +} + +\renewcommand{\DTcomment}[1]{\textcolor{yellow}{\hrulefill}\sffamily\textcolor{blue}{#1}} +% \renewcommand\DTstylecomment{\sffamily\color{green}\textsc} +\renewcommand\DTstyle{\ttfamily\textcolor{red}} +\setlength{\DTbaselineskip}{12pt} + +\newcommand{\semester}{2016.2} + +\newcommand{\lang}{\textsl{EPLan}} + + +\setpygmented{lang=java,tabsize=3,sty=default} +\efboxsetup{hidealllines,backgroundcolor=yellow!28} + +\mdfsetup{ + % backgroundcolor=green!10, + roundcorner=2pt, + skipabove=2pt, + skipbelow=2pt, + innerleftmargin=2pt, + innerrightmargin=2pt, + innertopmargin=.25\baselineskip, + innerbottommargin=.25\baselineskip, +} + + +% syntax configuration +\renewcommand{\syntleft}{\normalfont\slshape\hspace{0.25em}} +\renewcommand{\syntright}{\hspace{0.25em}} +\renewcommand{\ulitleft}{\normalfont\ttfamily\bfseries\frenchspacing\color{red}\hspace{0.25em}} +\renewcommand{\ulitright}{\hspace{0.25em}} + + + + +\begin{document} + +\title[compiler]{ + Compilador de \lang{} +} +\subject{Linguagens de Programação} +\author{José Romildo Malaquias} +\institute[UFOP]{ + Departamento de Computação\\ + Universidade Federal de Ouro Preto +} +\date{\semester} + +\frame{\titlepage} + +\frame{\tableofcontents} + + +\section{A estrutura do compilador} + + +\begin{frame}{Organização do compilador} + \begin{itemize} + \item Implementado na linguagem \textbf{Java}. + \item Ferramentas auxiliares: + \begin{itemize} + \item \textbf{JFlex}: gerador de analisador léxico + \item \textbf{CUP}: gerador de analisador sintático + \item \textbf{LLVM}: gerador de código + \item \textbf{Maven}: ferramenta de automação de compilação de + projetos Java + \end{itemize} + \item Usa bibliotecas externas: + \begin{itemize} + \item \textbf{commons-lang3}: complementa as classes que estão + em \pyginline|java.lang|. + + \item \textbf{jcommander}: framework Java muito pequeno que + torna trivial a análise de parâmetros de linha de comando + + \item \textbf{javacpp-presets-llvm}: interface para a biblioteca + LLVMC do projeto LLVM (infraestrutura de construçào de + compilador escrita em C++) + + \item \textbf{javaslang}: uma biblioteca funcional para Java 8+ que + fornece tipos de dados persistentes e estruturas de controle + funcionais + + \item \textbf{javaslang-render}: biblioteca de renderização para + algumas estruturas de dados fornecidas por javaslang + + \item \textbf{junit}: \emph{framework} com suporte à criação de testes + automatizados em Java + + \item \textbf{assertj}: fornece um rico conjunto de afirmações, com + mensagens de erro úteis, melhorando a legibilidade dos testes + automatizados em Java + \end{itemize} + \end{itemize} +\end{frame} + +\begin{frame}[fragile]{Maven} + \begin{itemize} + \item Usado para automatizar a compilação de projetos. + \item O projeto é configurado usando um \textbf{POM} (\emph{Project + Object Model)}, que é armazenado em um arquivo \texttt{pom.xml}. + \item O desenvolvimento pode ser feito em várias \textbf{fases}, + indicadas por \textbf{objetivos}, como: + \begin{center} + \begin{tabular}{ll} + \textit{clean} & remover arquivos gerados \\ + \textit{generate-sources} & gerar código automático \\ + \textit{process-resources} & processar recursos \\ + \textit{compile} & compilar \\ + \textit{process-test-resources} & processar recursos de teste \\ + \textit{test-compile} & testar compilação \\ + \textit{test} & testar \\ + \textit{package} & empacotar \\ + \textit{install} & instalar \\ + \textit{deploy} & implantar + \end{tabular} + \end{center} + \item Exemplo: compilar o projeto na linha de comando: +\begin{Verbatim}[frame=single] +$ mvn compile +\end{Verbatim} + \end{itemize} +\end{frame} + +\begin{frame}{Estrutura de diretórios do projeto} + \small + \noindent + \dirtree{% + .1 \lang{}-compiler. + .2 src\DTcomment{código fonte do projeto}. + .3 main\DTcomment{código fonte principal}. + .4 c\DTcomment{código fonte em C}. + .4 cup\DTcomment{código fonte para o CUP}. + .4 java\DTcomment{código fonte em Java}. + .4 jflex\DTcomment{código fonte para o JFlex}. + .3 test\DTcomment{código fonte dos testes}. + .4 java\DTcomment{código fonte dos testes em Java}. + .2 target\DTcomment{arquivos gerados automaticamente}. + .3 classes\DTcomment{classes geradas pelo compilador de Java}. + .3 generated-sources\DTcomment{código fonte gerado por ferramentas}. + .4 cup\DTcomment{código fonte gerado pelo CUP}. + .4 jflex\DTcomment{código fonte gerado pelo JFlex}. + .3 generated-test-sources\DTcomment{cód. fonte de testes gerado por ferramentas}. + .3 test-classes\DTcomment{classes dos testes geradas pelo compilador de Java}. + .2 pom.xml\DTcomment{arquivo de especificação do projeto}. + } +\end{frame} + +\section{Javaslang} + +\begin{frame}[fragile,allowframebreaks]{Javaslang} + \begin{itemize} + \item Javaslang fornece várias estruturas de dados funcionais, como: + \begin{itemize} + \item tuplas + \item listas + \item árvores + \begin{itemize} + \item Árvores serão amplamente utilizadas para exibir as + estruturas internas do compilador, incluindo as árvores + sintáticas. + \end{itemize} + \end{itemize} + \end{itemize} +\end{frame} + +\begin{frame}[fragile,allowframebreaks]{\texttt{javaslang.Tuple2}} + \footnotesize +\begin{pygmented}[] +import javaslang.Tuple; +import javaslang.Tuple2; + +public class TestJavaslang { + public static void main(String[] args) { + Tuple2 person = Tuple.of("paul", 17); + + String name = person._1; + Integer age = person._2; + + Tuple2 p = + person.map(n -> n + " jones", + a -> a + 1); + + Tuple2 q = + person.map((n, a) -> Tuple.of(n + " jones", a + 1)); + + String s = person.transform((n, a) -> n + ": " + a); + + System.out.println(s); + } +} +\end{pygmented} +\end{frame} + + + +\begin{frame}[fragile,allowframebreaks]{\texttt{javaslang.collection.List}} + \begin{itemize} + \item Exemplos de listas (simplesmente) encadeadas: +\begin{pygmented}[] +List list1 = List.empty(); +List list2 = List.of("nice"); +List list3 = List.of(11, 12, 13); +List list4 = list3.tail(); +List list5 = list4.prepend(10); +\end{pygmented} + \begin{center} + \begin{tikzpicture}[ + cons/.style={draw}, + var/.style={draw=none,blue}, + null/.style={circle,inner sep=0mm,minimum size=1mm}, + ] + + \graph [ + %layered layout, + grow right sep, + nodes={cons}, + ] { + list1[var] -> n1[null,as={}]; + list2[var] -> nice -> n2[null,as={}]; + list3[var] -> 11 -> 12 -> 13 -> n3[null,as={}]; + list4[var] -> 12; + list5[var] -> 10 -> 12; + }; + + \end{tikzpicture} + \end{center} + + \framebreak + + \item Operando com cada elemento de uma lista: +\begin{pygmented}[] +List lst = List.of(10, 20, 30); + +for (Integer x : lst) + System.out.println(x); + +lst.forEach(x -> System.out.println(x)); + +lst.forEach(System.out::println); +\end{pygmented} + + \framebreak + + \item Aplicando uma função a cada elemento da lista e coletando os + resultados em outra lista: +\begin{pygmented}[] +List a = List.of(4.0, 9.0, 25.0); +List c = a.map(Math::sqrt); +List b = a.map(x -> 2*x); +\end{pygmented} + + \framebreak + + \item Reduzindo uma lista: +\begin{pygmented}[] +List a = List.of("1", "2", "3"); +String str = a.fold("", (a1, a2) -> a1 + a2); + +List b = List.of(1, 2, 3, 4); +Integer sum = b.fold(0, (s, x) -> s + x); +\end{pygmented} + + \end{itemize} +\end{frame} + + + + +\begin{frame}[fragile,allowframebreaks]{\texttt{javaslang.collection.Tree}} +\begin{pygmented}[] +Tree tree1 = Tree.empty(); +Tree tree2 = Tree.of("nice"); +Tree tree3 = Tree.of(99, 21, 22, 23); +Tree tree4 = Tree.of(10, + Tree.of(5, Tree.of(2)), + Tree.of(7), + Tree.of(0), + Tree.of(19, Tree.of(3), Tree.of(8))); +\end{pygmented} + \begin{center} + \begin{tikzpicture}[ + cons/.style={draw}, + var/.style={draw=none,blue}, + null/.style={circle,inner sep=0mm,minimum size=1mm}, + ] + + \graph [ + layered layout, + %grow right sep, + nodes={cons}, + ] { + tree1[var] -> n1[null,as={}]; + tree2[var] -> nice; + tree3[var] -> 99 -> {21, 22, 23}; + tree4[var] -> 10 -> {5 -> 2, 7, 0, 19 -> {3, 8}}; + }; + + \end{tikzpicture} + \end{center} +\end{frame} + + +\begin{frame}[fragile,allowframebreaks]{\texttt{javaslang.render.text.PrettyPrinter}} + \small + \begin{columns}[t] + \begin{column}{.75\textwidth} +\begin{pygmented}[] +import javaslang.collection.Tree; + +import javaslang.render.text.PrettyPrinter; + +final Tree tree = + Tree.of("Ann", + Tree.of("Mary", + Tree.of("John", + Tree.of("Avila")), + Tree.of("Karen", + Tree.of("Frank")), + Tree.of("Steven\nAbbot\nBraddock")), + Tree.of("Peter", + Tree.of("Paul\nPalucci"), + Tree.of("Anthony")), + Tree.of("Christopher", + Tree.of("Samuel"))); + +final String out = PrettyPrinter.pp(tree); +\end{pygmented} + \end{column} + \begin{column}{.25\textwidth} +\begin{Verbatim} +Ann +├──Mary +│ ├──John +│ │ └──Avila +│ ├──Karen +│ │ └──Frank +│ └──Steven +│ Abbot +│ Braddock +├──Peter +│ ├──Paul +│ │ Palucci +│ └──Anthony +└──Christopher + └──Samuel +\end{Verbatim} + \end{column} + \end{columns} +\end{frame} + +\begin{frame}[fragile,allowframebreaks]{\texttt{javaslang.render.text.Boxes}} + \footnotesize +\begin{pygmented}[] +import javaslang.collection.Tree; +import javaslang.render.text.Boxes; + +final Tree tree = /* ... */ + +final String out = Boxes.box(tree).toString(); +\end{pygmented} + +\begin{verbatim} + ┌───┐ + │Ann│ + └─┬─┘ + ┌───────────────┴──────┬────────────────┐ + ┌──┴─┐ ┌──┴──┐ ┌─────┴─────┐ + │Mary│ │Peter│ │Christopher│ + └──┬─┘ └──┬──┘ └─────┬─────┘ + ┌───────┬─┴───────┐ ┌────┴────┐ │ +┌──┴─┐ ┌──┴──┐ ┌────┴───┐ ┌───┴───┐ ┌───┴───┐ ┌───┴──┐ +│John│ │Karen│ │ Steven │ │ Paul │ │Anthony│ │Samuel│ +└──┬─┘ └──┬──┘ │ Abbot │ │Palucci│ └───────┘ └──────┘ + │ │ │Braddock│ └───────┘ +┌──┴──┐ ┌──┴──┐ └────────┘ +│Avila│ │Frank│ +└─────┘ └─────┘ +\end{verbatim} +\end{frame} + + +\begin{frame}[fragile,allowframebreaks]{\texttt{javaslang.render.text.DotFile}} + \small + \begin{columns}[t] + \begin{column}{.5\textwidth} +\begin{pygmented}[] +import javaslang.collection.Tree; +import javaslang.render.dot.DotFile; + +final Tree tree = /* ... */; + +DotFile.write(tree, "tree.dot"); +\end{pygmented} + \end{column} + \begin{column}{.5\textwidth} + \begin{itemize} + \item Dot é uma linguagem para descrever grafos. + \item É necessário o pacote \textbf{graphviz}. + \end{itemize} +\begin{Verbatim}[frame=single] +$ dot -Tpng -O tree.dot +\end{Verbatim} + \end{column} + \end{columns} + \begin{center} + \makebox[0pt][r]{\texttt{tree.dot.png}} + \includegraphics[scale=.35]{images/tree.png} + \end{center} +\end{frame} + +\section{Posição no código fonte} + +\begin{frame}[fragile,allowframebreaks]{Localização no código fonte} + \begin{itemize} + \item A localização é usada para reportar erros. + \item Indica onde uma frase do programa começa e termina no código + fonte. + \item Representada pela classe \pyginline|parse.Loc| + \begin{pygmented}[lang=java] +Loc(Location left, Location right) + \end{pygmented} + \item Usa o tipo + \begin{pygmented}[lang=java] +java_cup.runtime.ComplexSymbolFactory.Location + \end{pygmented} + contendo informações como: + \begin{itemize} + \item nome da unidade de compilação (arquivo fonte) + \item número da linha + \item número da coluna + \end{itemize} + \end{itemize} +\end{frame} + +\begin{frame}[fragile,allowframebreaks]{Construção da localização} + \begin{itemize} + \item Alguns métodos de fábrica: +\begin{pygmented}[] +import java_cup.runtime.Symbol; +import java_cup.runtime.ComplexSymbolFactory.ComplexSymbol; +import java_cup.runtime.ComplexSymbolFactory.Location; + +/* ... */ + +public static Loc loc() +public static Loc loc(Location left) +public static Loc loc(Location left, Location right) +public static Loc loc(Symbol symbol) +public static Loc loc(Symbol a, Symbol b) +public static Loc loc(ComplexSymbol symbol) +public static Loc loc(ComplexSymbol a, ComplexSymbol b) +\end{pygmented} + + \item \pyginline|Symbol| e \pyginline|ComplexSymbol| representam + símbolos terminais + \end{itemize} +\end{frame} + + +\section{Gerenciamento de erros} + +\begin{frame}[fragile,allowframebreaks]{Reportagem de erro} + \begin{itemize} + \item Os erros são reportados por meio do mecanismo de + \textbf{exceções} de Java. + \item Erros no programa fonte são representados pela classe + \pyginline|error.CompileError|, subclasse de + \pyginline|RuntimeError|. + \item Erros na implementação do compilador são representados pela + classe \pyginline|error.FatalError|, também subclasse de + \pyginline|RuntimeError|. + \item A classe \pyginline|error.ErrorHelper| tem alguns métodos + estáticos que facilitam a criação de objetos de erro: +\begin{pygmented}[] +static CompilerError error(String message) +static CompilerError error(String format, Object... args) +static CompilerError error(Loc loc, String format, Object... args) + +static FatalError fatal(String format, Object... args) +\end{pygmented} + \end{itemize} +\end{frame} + + +\section{Análise léxica} + +\begin{frame}[fragile,allowframebreaks]{Símbolos terminais} + \begin{itemize} + \item Os \textbf{símbolos terminais} são definidos na gramática + livre de contexto do CUP (arquivo + \texttt{src/main/cup/parser.cup}). + \item Exemplos: +\begin{pygmented}[] +terminal String LITREAL; +terminal PLUS, MINUS, TIMES, DIV; +terminal LPAREN, RPAREN; +\end{pygmented} + + \item O CUP gera uma interface \pyginline|parse.SymbolConstants| + contendo a definição de constantes correspondentes aos terminais + que foram declarados. + + \item Quando relevante os terminais podem ter um valor semântico + associado. + + \item A classe \pyginline|ComplexSymbol| é usada para representar + os símbolos terminais, contendo as seguintes informações: + \begin{itemize} + \item classificação (como declarado na gramática) + \item lexema + \item localização (começo e fim) no código fonte + \item valor semântico + \end{itemize} + \end{itemize} +\end{frame} + +\begin{frame}[fragile,allowframebreaks]{Regras léxicas} + \begin{itemize} + \item O analisador léxico é gerado pelo \textbf{JFlex}. + \item As regras léxicas são especificadas no arquivo + \alert{\texttt{src/main/jflex/lexer.jflex}}. + \item O JFlex cria a classe \pyginline|parse.Lexer| compatível com + o CUP. + \item Os \textbf{lexemas} (palavras que formam os símbolos + léxicos) são descritos por \textbf{expressões regulares}. + \item A classificação so símbolo terminal é feita na \textbf{ação + semântica} (código em Java que faz parte da regra léxica). + \item Para facilitar a criação dos diversos símbolos léxicos + recomenda-se o uso dos \alert{métodos auxiliares} (definidos no + próprio arquivo de especificação): +\begin{pygmented}[] +private Symbol tok(int type, String lexeme, Object value) +private Symbol tok(int type, Object value) +private Symbol tok(int type) +\end{pygmented} + \end{itemize} +\end{frame} + + +\begin{frame}[fragile,allowframebreaks]{Exemplo de regras léxicas} +\begin{pygmented}[lang=text] +[ \t\f\n\r]+ { /* skip */ } + +[0-9]+ ("." [0-9]+)? { return tok(LITREAL, yytext()); } + +"+" { return tok(PLUS); } +"-" { return tok(MINUS); } +"*" { return tok(TIMES); } +"/" { return tok(DIV); } +"(" { return tok(LPAREN); } +")" { return tok(RPAREN); } + +. { throw error(Loc.loc(locLeft()), + "unexpected char '%s'", + yytext()); } +\end{pygmented} +\end{frame} + + +\section{Análise sintática} + +\begin{frame}[fragile,allowframebreaks]{Análise sintática} + \begin{itemize} + \item A especificação sintática (\textbf{gramática livre de + contexto}) é feita no arquivo + \alert{\texttt{src/main/cup/parser.cup}}. + \item Algumas opções de execução do CUP são indicadas no arquivo + \alert{\texttt{pom.xml}}. + \item O analisador sintático é gerado pelo \textbf{CUP}, que cria + a classe \pyginline|parse.Parser| e a interface + \pyginline|parse.SymbolConstants|. + \item Na gramática livre de contexto são especificados: + \begin{itemize} + \item os símbolos terminais + \item os símbols não terminais + \item o símbolo inicial + \item as regras de produção + \end{itemize} + \end{itemize} +\end{frame} + +\begin{frame}[fragile,allowframebreaks]{Ações semânticas} + \begin{itemize} + \item Quando um símbolo (terminal ou não terminal) tem um + \textbf{valor semântico}, o tipo do valor semântico é informado na + declaração do símbolo. + \item O cálculo do valor semântico do símbolo no lado esquerdo de + uma regra de produção é feito usando os valores semênticas dos + símbolos que aparecem no lado direiro da regra através de uma + \textbf{ação semântica} (código em Java). + \item Quando um \alert{nome} é associado a um símbolo no lado + direito de uma regra (por exemplo \pyginline|exp:nome|), o CUP + cria três variáveis (no exemplo \pyginline|nome|, + \pyginline|nomexleft| e \pyginline|nomexright|) no codigo gerado, + contendo o valor semântico, a localização esquerda (onde começa no + código fonte), e a localização direita (onde termina no código + fonte) do símbolo, respectivamente. + \end{itemize} +\end{frame} + + +\begin{frame}[fragile,allowframebreaks]{Exemplo de gramática para o CUP} + \scriptsize +\begin{pygmented}[] +terminal String LITREAL; +terminal PLUS, MINUS, TIMES, DIV; +terminal LPAREN, RPAREN; + +non terminal Exp exp; +non terminal Exp term; +non terminal Exp factor; + +start with exp; + +exp ::= + exp:x PLUS term:y {: RESULT = new ExpBinOp(ExpBinOp.Op.PLUS, x, y); :} +| exp:x MINUS term:y {: RESULT = new ExpBinOp(ExpBinOp.Op.MINUS, x, y); :} +| term:x {: RESULT = x; :} +; + +term ::= +| term:x TIMES factor:y {: RESULT = new ExpBinOp(ExpBinOp.Op.TIMES, x, y); :} +| term:x DIV factor:y {: RESULT = new ExpBinOp(ExpBinOp.Op.DIV, x, y); :} +| factor:x {: RESULT = x; :} +; + +factor ::= + LITREAL:x {: RESULT = new ExpReal(x); :} +| LPAREN exp:x RPAREN {: RESULT = x; :} +; +\end{pygmented} +\end{frame} + + +\section{Árvores sintáticas} + +\begin{frame}[fragile,allowframebreaks]{Árvores sintáticas} + \begin{itemize} + \item \textbf{Árvore sintática} é uma \alert{estrutura de dados + hierárquica} que representa a estrutura sintática do programa + fonte. + \item A \textbf{raiz} da árvore é o \alert{símbolo inicial} da + gramática. + \item As \textbf{folhas} são os \alert{símbolos terminais} que, + lidos da esquerda para a direita, correspondem ao programa fonte. + \item Pode ser: + \begin{itemize} + \item \textbf{concreta}: todos os símbolos na sequência de + derivação são colocados na árvore + \item \textbf{abstrata}: apenas as informações relevantes para o + entendimento da estrutura do programa são mantidos na árvore + \end{itemize} + \item A saída do \textbf{analisador sintático} é uma árvore + sintática abstrata (\alert{AST}). + \end{itemize} +\end{frame} + +\begin{frame}[fragile,allowframebreaks]{Representação} + \begin{itemize} + \item A representação das árvores sintáticas é feita através de + classes no pacote \pyginline|absyn|. + \item A classe abstrata \pyginline|absyn.AST| é superclasse de + todas as árvores sintáticas abstratas. + \item Esta classe implementa a interface \pyginline|ToTree|: +\begin{pygmented}[] +package javaslang.render; + +import javaslang.collection.Tree; + +public interface ToTree { + public abstract Tree.Node toTree(); +} +\end{pygmented} + \item O método \pyginline|toTree| converte a árvore abstrata em + uma estrutura de dados geral para árvores cujos nós armazenam + strings, útil na apresentação visual da árvore sintática. + \end{itemize} +\end{frame} + + +\begin{frame}[fragile,allowframebreaks]{Definindo as árvores abstratas} + \begin{itemize} + \item Para cada \alert{categoria sintática} (como expressões, + comandos, ou declarações) reprentada por um \textbf{símbolo não + terminal} definimos uma subclasse abstrata de + \pyginline|absyn.AST|. + \item Para cada \alert{forma} da categoria sintática para um não + terminal (como as formas de expressão: expressão constante, + operação binária, chamada de função, etc.), representada por uma + \textbf{regra de produção}, definamos uma subclasse da classe que + representa aquela forma específica da categoria sintática. + \item + Nesta classe deve-se: + \begin{itemize} + \item definir os \alert{campos} necessários para os componentes + (sub-árvores) da árvore sintática, + \item definir \alert{construtores} que inicializam estes campos + com valores passados como argumentos, + \item definir o método \pyginline|toTree|. + \end{itemize} + \end{itemize} +\end{frame} + +\begin{frame}[fragile,allowframebreaks]{A classe AST} +\begin{pygmented}[] +package absyn; + +import javaslang.render.ToTree; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +public abstract class AST implements ToTree { + + @Override + public String toString() { + return ToStringBuilder.reflectionToString( + this, + ToStringStyle.SHORT_PREFIX_STYLE); + } + +} +\end{pygmented} +\end{frame} + +\begin{frame}[fragile,allowframebreaks]{A classe Exp} +\begin{pygmented}[] +package absyn; + +public abstract class Exp extends AST { +} +\end{pygmented} +\end{frame} + +\begin{frame}[fragile,allowframebreaks]{A classe ExpReal} +\begin{pygmented}[] +package absyn; + +import javaslang.collection.Tree; + +public class ExpReal extends Exp { + + public final String value; + + public ExpReal(String value) { + this.value = value; + } + + @Override + public Tree.Node toTree() { + return Tree.of("ExpReal: " + value); + } +} +\end{pygmented} +\end{frame} + +\begin{frame}[fragile,allowframebreaks]{A classe ExpReal} + \relscale{0.78} +\begin{pygmented}[] +package absyn; + +import javaslang.collection.Tree; + +public class ExpBinOp extends Exp { + + public enum Op {PLUS, MINUS, TIMES, DIV} + + public final Op op; + public final Exp left; + public final Exp right; + + public ExpBinOp(Op op, Exp left, Exp right) { + this.op = op; + this.left = left; + this.right = right; + } + + @Override + public Tree.Node toTree() { + return Tree.of("ExpBinOp: " + op, left.toTree(), right.toTree()); + } +} +\end{pygmented} +\end{frame} + + +\section{Geração de código} + +\begin{frame}[fragile,allowframebreaks]{Representação intermediária} + \begin{itemize} + \item A árvore sintática do programa fonte é traduzida para uma + representação intermediária do código fonte. + \item Usaremos a representação intermediária do framework + \textbf{LLVM}. + \item A biblioteca Java \texttt{javacpp-presets-llvm} será usada + para criar a representação intermediária. + \item A classe \pyginline|absyn.Exp| deve ter um método abstrato + para converter uma expressão para a sua representação + intermediária. +\begin{pygmented}[] +import static org.bytedeco.javacpp.LLVM.*; +/* ... */ +public abstract LLVMValueRef translate(LLVMModuleRef module, + LLVMBuilderRef builder); +\end{pygmented} + \item Suas subclasses devem implementar este método. + \end{itemize} +\end{frame} + +\begin{frame}[fragile,allowframebreaks]{Representação intermediária de constantes} +\begin{pygmented}[] +package absyn; + +// ... +import static org.bytedeco.javacpp.LLVM.*; + +public class ExpReal extends Exp { + // ... + + @Override + public LLVMValueRef translate(LLVMModuleRef module, + LLVMBuilderRef builder) { + return LLVMConstRealOfString(LLVMDoubleType(), value); + } +} +\end{pygmented} +\end{frame} + +\begin{frame}[fragile,allowframebreaks]{Representação intermediária de operação binária} + \relscale{0.76} +\begin{pygmented}[] +package absyn; + +// ... +import static org.bytedeco.javacpp.LLVM.*; +import static error.ErrorHelper.fatal; + +public class ExpBinOp extends Exp { + // ... + + @Override + public LLVMValueRef translate(LLVMModuleRef module, LLVMBuilderRef builder) { + final LLVMValueRef v_left = left.translate(module, builder); + final LLVMValueRef v_right = right.translate(module, builder); + switch (op) { + case PLUS: return LLVMBuildFAdd(builder, v_left, v_right, "addtmp"); + case MINUS: return LLVMBuildFSub(builder, v_left, v_right, "subtmp"); + case TIMES: return LLVMBuildFMul(builder, v_left, v_right, "multmp"); + case DIV: return LLVMBuildFDiv(builder, v_left, v_right, "divtmp"); + default: fatal("unknown operator %s in binary operation", op); + return LLVMConstReal(LLVMDoubleType(), 0); + } + } +} +\end{pygmented} +\end{frame} + + + +\begin{frame}[fragile,allowframebreaks]{Atividade 1} + \begin{tcolorbox}[title=Inverso aditivo] + Implementar a operação que calcula o inverso aditivo (ou negação) + à linguagem \lang{}. Será usado o operador unário prefixo + \pyginline|-|, com precedência maior que dos operadores + aritméticos binários. + \begin{enumerate} + \item Definir uma nova classe \pyginline|absyn.ExpNegate| + \begin{itemize} + \item subclasse de \pyginline|absyn.Exp| + \item contendo um campo correspondente ao operando da negação + \item implementar o método \pyginline|toTree| + \item implementar o método \pyginline|translate| + \end{itemize} + \item Acrescentar uma regra de produção adequada na gramática da + linguagem. + \end{enumerate} + + \begin{tips} + \item Na geração de código use o método + + \href{http://bytedeco.org/javacpp-presets/llvm/apidocs/org/bytedeco/javacpp/LLVM.html#LLVMBuildFNeg-org.bytedeco.javacpp.LLVM.LLVMBuilderRef-org.bytedeco.javacpp.LLVM.LLVMValueRef-java.lang.String-}{\pyginline|LLVMBuildFNeg|} + + \href{http://llvm.org/docs/doxygen/html/group__LLVMCCoreInstructionBuilder.html#gaf748025627b03f4f2659b006b127b758}{\pyginline|LLVMBuildFNeg|} + \end{tips} +\end{tcolorbox} + + \framebreak + + Comandos úteis: +\begin{Verbatim}[frame=single] +$ cd /eplan +$ git checkout master +$ git pull upstream master +$ git checkout -b atividade1 +$ # desenvolva sua atividade +$ # faça testes +$ git status +$ git add +$ git commit -m +$ git push origin atividade1 +$ # faça um pull request no github +\end{Verbatim} +\end{frame} + + +\section{Análise semântica} + +\begin{frame}[fragile,allowframebreaks]{Anotando a localização na árvore sintática} + \begin{itemize} + \item Na análise semêntica os erros encontrados devem ser + reportados. + + \item Deve-se indicar a localização do erro no código fonte. + + \item Por isto a árvore sintática deve conter a + \textbf{localização}. + + \item O atributo \pyginline|loc| foi adicionado à classe abstrata + \pyginline|absyn.AST|. +\begin{pygmented}[] +import parse.Loc; + +public abstract class AST implements ToTree { + + // Location where the phrase was found in the source code + protected final Loc loc; + + public AST(Loc loc) { + this.loc = loc; + } + + // ... +} +\end{pygmented} + + \framebreak + + \item Um argumento correspondente foi adicionado aos construtores + das subclasses de \pyginline|absyn.AST|. Por exemplo: +\begin{pygmented}[] +public class ExpReal extends Exp { + + public final String value; + + public ExpReal(Loc loc, String value) { + super(loc); + this.value = value; + } + + // ... +} +\end{pygmented} + + \framebreak + + \item A criação das árvores sintáticas nas ações semânticas do + analisador sintático deve informar a localização. Exemplo: +\begin{pygmented}[] +factor ::= + LITREAL:x {: RESULT = new ExpReal(loc(xxleft,xxright), x); :} +; +\end{pygmented} + + \item Na regra de produção, ao indicarmos o nome do valor + semântico de um símbolo, são criadas três variáveis no analisador + gerado pelo CUP, contendo as seguintes informações: + \begin{itemize} + \item valor semântico do símbolo + \item posição onde o símbolo começou no código fonte + \item posição onde o símbolo terminou no código fonte + \end{itemize} + No exemplo estas variáveis são respectivamente \pyginline|x|, + \pyginline|xxleft|, e \pyginline|xxright|. + \end{itemize} +\end{frame} + + +\begin{frame}[fragile,allowframebreaks]{Representando os tipos da linguagem} + \begin{itemize} + \item O pacote \pyginline|type| contém classes usadas para representar + os tipos da linguagem sendo compilada. + \item A representação geral é \pyginline|Type|. + \item \pyginline|Type| é uma classe abstrata, com subclasses concretas + para representar cada uma das possibiliades: + \begin{center} + \small + \begin{tabular}{lll} \hline + \textbf{descrição} & \textbf{classe} & \textbf{objeto} \\\hline + \texttt{bool} & \pyginline|BOOL| & \pyginline|BOOL.T| \\ + \texttt{int} & \pyginline|INT| & \pyginline|INT.T| \\ + \texttt{real} & \pyginline|REAL| & \pyginline|REAL.T| \\ + \texttt{char} & \pyginline|CHAR| & \pyginline|CHAR.T| \\ + \texttt{string} & \pyginline|STRING| & \pyginline|STRING.T| \\ + \emph{array} & \pyginline|ARRAY| & \pyginline|new Array(Type element)| \\ + \emph{registro} & \pyginline|RECORD| & \pyginline|new RECORD(List> fields)| \\ + \emph{registro nulo} & \pyginline|NIL| & \pyginline|NIL.T| \\ + \texttt{unit} & \pyginline|UNIT| & \pyginline|UNIT.T| \\ + \emph{nome} & \pyginline|NAME| & \pyginline|new Name(Symbol name, Type binding)| \\\hline + \end{tabular} + \end{center} + \end{itemize} +\end{frame} + +\begin{frame}[fragile,allowframebreaks]{Algumas operações com tipos} + \begin{description} + \item[\pyginline|Type actual()|]\mbox{}\newline + \begin{itemize} + \item Retorna a representação que é de fato usada para o tipo. + \item É o próprio objeto, exceto para a classe \pyginline|NAME|, onde + é retornado \pyginline|binding.actual()|. + \end{itemize} + \framebreak + + \item[\pyginline|boolean is(Type type)|]\mbox{}\newline + \begin{itemize} + \item Verifica se o tipo que recebe a mensagem é compatível (é igual + ou pode ser convertido para) o tipo dado como argumento. + \item Retorna \pyginline|true| somente se os dois tipos forem + idênticos, exceto nos seguintes casos: + \begin{itemize} + \item o tipo do registo nulo (\texttt{nil}), \pyginline|NIL|, é + compatível com \pyginline|NIL| e com qualquer tipo registro, + \item um tipo \pyginline|NAME| é compatível com algum tipo, se + e somente se o seu atributo \pyginline|binding| for compatível + com o tipo. + \end{itemize} + \end{itemize} + \framebreak + + \item[\pyginline|boolean is(Type... types)|]\mbox{}\newline + \begin{itemize} + \item Verifica a compatibilidade com algum dos tipos dados como + argumentos. + \end{itemize} + \end{description} +\end{frame} + + +\begin{frame}[fragile,allowframebreaks]{Reportando erros comuns} + \begin{itemize} + \item A interface \pyginline|semantic.SemanticHelper| define + alguns métodos para reportar erros comumente encontrados pelo + compilador no código fonte. + + \item Um dos erros mais comuns é a inconsistência de tipos. +\begin{pygmented}[] +public interface SemanticHelper { + + static CompilerError typeMismatch(Loc loc, Type found, Type... expected) + // ... + } + + // ... +} +\end{pygmented} + \end{itemize} +\end{frame} + +\begin{frame}[fragile,allowframebreaks]{Análise semântica} + \begin{itemize} + \item O analisador semântico + \begin{itemize} + \item verifica a consistência do programa + \item calcula o tipo das expressões + \end{itemize} + \item Expressões tem um atributo \pyginline|type| cujo valor é a + representação do tipo obtido para a expressão. + \item \pyginline|type| é calculado pelo analisador semântico. +\begin{pygmented}[] +import types.Type; + +public abstract class Exp extends AST { + + // Type of the expression, calculated by the semantic analyser + public Type type; + + // Obtain the type of the expression as a string prefixed by the given text. + protected String annotateType(String text) { + final String theType = type == null ? "" : "\n<" + type + ">"; + return text + theType; + } + + // ... +} +\end{pygmented} + + \framebreak + + \item O método \pyginline|semantic| da classe + \pyginline|absyn.Exp| faz análise semântica da expressão. + \begin{itemize} + \item Usa o método auxiliar \pyginline|semantic_| para fazer a + análise semântica de fato, obtendo o tipo da expressão. + \item Coloca o tipo encontrado no atributo \pyginline|type|. + \end{itemize} +\begin{pygmented}[] +public abstract class Exp extends AST { + // ... + + // Do semantic analysis of the expression + public Type semantic() { + type = semantic_(); + return type; + } + + // Type check the expression. Should be defined in the concrete subclasses. + protected abstract Type semantic_(); +} +\end{pygmented} + + \item Subclasses de \pyginline|absyn.Exp| devem definir o método + \pyginline|semantic_| apropriadamente. + + \item Por exemplo: +\begin{pygmented}[] +public class ExpReal extends Exp { + // ... + + @Override + protected Type semantic_() { + return REAL.T; + } +} +\end{pygmented} + + \end{itemize} +\end{frame} + + + +\begin{frame}[fragile,allowframebreaks]{Atividade 2: literal inteiro} + Implementar \textbf{literais inteiros} no compilador de \lang{}. + \begin{enumerate} + \item Para desenvolver esta atividade faça o \emph{checkout} da + \alert{versão 0.17} do projeto. + + \item Definir uma nova classe \pyginline|types.INT| para + representar o tipo \texttt{int} de \lang{}. + + \item Definir uma nova classe \pyginline|absyn.ExpInt| para + representar as árvores sintáticas das constantes inteiras: + \begin{itemize} + \item subclasse de \pyginline|absyn.Exp| + \item contendo um campo correspondente ao valor da constante + \item implementar o método \pyginline|toTree| + \item implementar o método \pyginline|semantic_| + \item implementar o método \pyginline|translate| + \end{itemize} + + \item Modifique a classe \pyginline|absyn.ExpBinOp| de forma que + os operadores aritméticos aceitem operandos inteiros e + reais. Neste momento não é necessário fazer conversão implícita + dos operandos de inteiro para real. Por hora os operandos devem + apenas ser do mesmo tipo numérico. + + \item Acrescentar na gramática da linguagem: + \begin{itemize} + \item o símbolo terminal \pyginline|LITINT| + \item uma regra de produção adequada + \end{itemize} + + \item Na especificação léxica da linguagem + \begin{itemize} + \item acrescentar uma regra para o literal inteiro: + + Um literal inteiro é uma sequência não vazia de dígitos + decimais. + + \item modificar a regra do literal real para não casar com + literais inteiros + \end{itemize} + + \item Definir a função \pyginline|__eplan_print_int| (em C) na + biblioteca padrão de \lang{} para exibir um valor inteiro. O + protótipo da função deve ser: +\begin{pygmented}[] +extern void __eplan_print_int(const int32_t x) +\end{pygmented} + O tipo \pyginline|int32_t| está definido em + \texttt{inttypes.h}. Use a função \pyginline|printf| e a macro + \pyginline|PRIi32| na formatação da saída. + + \item Modificar o método \pyginline|addRuntime| na classe + \pyginline|translate.Generator| para adicionar o protótipo da função + \pyginline|__eplan_print_int| no código gerado. + + \item Modificar o método \pyginline|addPrintResult| na classe + \pyginline|codegen.Generator| para considerar o caso de valores + inteiros. Este método gera código para exibir o valor de uma + expressão na saída padrão. + \end{enumerate} + + \begin{tips} + \item Na geração de código use os métodos + + \href{http://bytedeco.org/javacpp-presets/llvm/apidocs/org/bytedeco/javacpp/LLVM.html#LLVMConstIntOfString-org.bytedeco.javacpp.LLVM.LLVMTypeRef-java.lang.String-byte-}{\pyginline|LLVMConstIntOfString|} + + \href{http://bytedeco.org/javacpp-presets/llvm/apidocs/org/bytedeco/javacpp/LLVM.html#LLVMBuildAdd-org.bytedeco.javacpp.LLVM.LLVMBuilderRef-org.bytedeco.javacpp.LLVM.LLVMValueRef-org.bytedeco.javacpp.LLVM.LLVMValueRef-java.lang.String-}{\pyginline|LLVMBuildAdd|} + + \href{http://bytedeco.org/javacpp-presets/llvm/apidocs/org/bytedeco/javacpp/LLVM.html#LLVMBuildSub-org.bytedeco.javacpp.LLVM.LLVMBuilderRef-org.bytedeco.javacpp.LLVM.LLVMValueRef-org.bytedeco.javacpp.LLVM.LLVMValueRef-java.lang.String-}{\pyginline|LLVMBuildSub|} + + \href{http://bytedeco.org/javacpp-presets/llvm/apidocs/org/bytedeco/javacpp/LLVM.html#LLVMBuildMul-org.bytedeco.javacpp.LLVM.LLVMBuilderRef-org.bytedeco.javacpp.LLVM.LLVMValueRef-org.bytedeco.javacpp.LLVM.LLVMValueRef-java.lang.String-}{\pyginline|LLVMBuildMul|} + + \href{http://bytedeco.org/javacpp-presets/llvm/apidocs/org/bytedeco/javacpp/LLVM.html#LLVMBuildSDiv-org.bytedeco.javacpp.LLVM.LLVMBuilderRef-org.bytedeco.javacpp.LLVM.LLVMValueRef-org.bytedeco.javacpp.LLVM.LLVMValueRef-java.lang.String-}{\pyginline|LLVMBuildSDiv|} +\end{tips} +\end{frame} + + + +% \section{Identificadores} + + +% \begin{frame}[fragile,allowframebreaks]{Representando identificadores} +% \begin{itemize} +% \item \textbf{Identificadores} são nomes dados a diversas entidades em +% um programa: tipos, variáveis, funções, módulos, classes, etc. +% \item Quando uma declaração é analisada, alguma informação sobre o +% identificador é armazenada em um \textbf{ambiente} (um dicionário, +% também chamado de \textbf{tabela de símbolos}), contendo por exemplo: +% \begin{itemize} +% \item tipo de uma variável +% \item tipo dos argumentos e do resultado de uma função +% \item estrutura de um tipo +% \end{itemize} +% \item Posteriormente quando o nome é usado em uma frase, esta informação +% deve ser recuperada do ambiente para analisar a frase. +% \item Poderiam ser representados por \emph{strings}. +% \item Porém \pyginline|String| não é uma boa escolha porque: +% \begin{itemize} +% \item a representação na memória é ineficiente, pois todos os +% caracteres do nome são armazenados repetidamente, uma vez para cada +% ocorrência do nome, e +% \item a pesquisa na tabela de símbolos é ineficiente, pois é baseada +% na comparação de possivelmente todos os caracteres da nome. +% \end{itemize} +% \end{itemize} +% \end{frame} + + +% \begin{frame}[fragile,allowframebreaks]{Símbolos} +% \begin{itemize} +% \item Novo tipo para representar identificadores: +% \pyginline|symbol.Symbol|. +% \item Quando o analisador léxico encontra o nome pela primeira vez, ele +% o armazena na memória. +% \item Nas demais ocorrências do nome o analisador léxico usa uma +% referência para o nome já armazenado na memória. +% \item Desta forma cada nome é alocado na memória uma única vez. +% \item A comparação dos nomes se resume à comparação de referências. +% \item Consegue-se assim uma melhor eficiência no uso da memória, e +% também na comparação de nomes, fundamental para a pesquisa na tabela de +% símbolos. +% \item Um símbolo é construído a partir de uma string usando o método +% \pyginline|symbol.Symbol symbol.Symbol.symbol(String nome)|. +% \end{itemize} +% \end{frame} + +% \begin{frame}[fragile,allowframebreaks]{Há duas classes \texttt{Symbol}} +% \begin{itemize} +% \item \pyginline|java_cup.runtime.Symbol|\newline +% Representam símbolos gramaticais (terminais e não terminais). + +% \item \pyginline|symbol.Symbol|\newline +% Representam identificadores. +% \end{itemize} +% \end{frame} + + +% \begin{frame}[fragile,allowframebreaks]{O problema dos tipos mutuamente recursivos} +% \begin{itemize} +% \item A classe \pyginline|NAME| é usada na compilação de tipos +% mutuamente recursivos. +% \item O tipo é usado na definição de si mesmo ou de outros tipos com +% dependência mútua. +% \item Exemplo: +% \begin{pygmented}[lang=text] +% let type list = { head: tree, tail: list } +% type tree = { info: int, children: list } +% in +% # ... +% \end{pygmented} +% \item Problema: ao pesquisar a ocorrência do tipo que aparece no lado +% direito da definição, ele ainda não se encontra na tabela de símbolos +% (pois está sendo compilado neste momento), gerando um erro de \emph{tipo +% indefinido}. +% \item Solução: compilação em duas etapas: +% \begin{itemize} +% \item Primeiramente é criada e inserida na tabela de símbolos uma +% instância de \pyginline|NAME| para representar o tipo. +% \item Posteriormente compila-se a definição do tipo e atualiza-se o +% atributo \pyginline|binding| deste objeto. +% \end{itemize} +% \end{itemize} +% \end{frame} + + +% \begin{frame}[fragile,allowframebreaks]{Ambiente (Tabelas de Símbolos)} +% \begin{itemize} +% \item O \textbf{ambiente} é formado por \textbf{tabelas de símbolos} +% (\textbf{dicionários} cuja chave é um símbolo). +% \item Contém informações sobre os identificadores válidos em um +% determinado ponto do programa sendo compilado: +% \begin{itemize} +% \item \textbf{variáveis}: tipo da variável +% \item \textbf{funções}: tipo dos argumentos e tipo do resultado da +% função +% \item \textbf{tipos}: estrutura do tipo +% \end{itemize} +% \item Implementação: classe \pyginline|env.Env| +% \item Há dois espaços de nomes, implementados em duas tabelas de +% símbolos: +% \begin{itemize} +% \item \textbf{variáveis e funções}: atributo \pyginline|venv|\newline +% A cada símbolo é associado uma instância da classe abstrata +% \pyginline|env.Entry|, que tem duas classes concretas: +% \begin{itemize} +% \item \pyginline|env.VarEntry(Type ty)| +% \item \pyginline|env.FunEntry(Type result, List formals)| +% \end{itemize} +% \item \textbf{tipos}: atributo \pyginline|tenv|\newline A cada símbolo +% é associado uma instância da classe abstrata \pyginline|type.Type|. +% \end{itemize} +% \end{itemize} +% \begin{center} +% \small +% \begin{tabular}{lll}\hline +% \textbf{espaço de nomes} & \textbf{atributo} & \textbf{informação associada ao símbolo} \\\hline +% variáveis e funções & \pyginline|venv| & \pyginline|Entry| \\ +% & & ~\pyginline|VarEntry(Type ty)| \\ +% & & ~\pyginline|FunEntry(Type result, List formals)| \\\hline +% tipos & \pyginline|tenv| & \pyginline|Type| \\\hline +% \end{tabular} +% \end{center} +% \end{frame} + + +% \begin{frame}[fragile,allowframebreaks]{Nomes pré-definidos} +% \begin{itemize} +% \item O construtor da classe \pyginline|Env| deve criar as tabelas de +% símbolos e incluir os nomes pré-definidos da linguagem (biblioteca +% padrão). + +% \item Tipos: +% \begin{pygmented}[lang=text] +% bool +% int +% real +% char +% string +% unit +% \end{pygmented} + +% \item Variáveis: não há nenhuma variável pré-definida. +% \framebreak + +% \item Funções: +% \begin{pygmented}[lang=text] +% function print_bool(x: bool): unit +% function not(b: bool): bool + +% function print_int(x: int): unit + +% function print_real(x: real): unit +% function round(f: real): int +% function ceil(f: real): int +% function floor(f: real): int +% function real(i: int): real + +% function print(x: string): unit +% function length(s: string): int +% function substring(s: string, start: int, length: int): string +% \end{pygmented} +% \end{itemize} +% \end{frame} + + + +% \begin{frame}[fragile,allowframebreaks]{Variáveis simples} +% \begin{center} +% \begin{synshorts} +% \small +% \begin{tabular}{r@{$\;\rightarrow\;$}l>{\textcolor{blue}\bgroup}r<{\egroup}} +% & & variável \\ +% & ":=" & atribuição \\ +% & "let" "in" & expressão de declaração \\[.9em] +% & "id" & variável simples \\[.9em] +% & & sequência de declarações \\ +% & & \\[.9em] +% & "var" "id" ":" "id" "=" & declaração de variável \\ +% & "var" "id" "=" & \\ +% \end{tabular} +% \end{synshorts +% } +% \end{center} +% \end{frame} + +% \begin{frame}[fragile,allowframebreaks]{Variáveis simples: árvores sintáticas} +% \begin{pygmented}[] +% // declarações +% Dec(Loc loc) // classe abstrata +% VarDec(Loc loc, Symbol name, Symbol type, Exp init) + +% // variáveis +% Var(Loc loc) // classe abstrata +% SimpleVar(Loc loc, Symbol name) + +% // expressões +% LetExp(Loc loc, List decs, Exp body) +% VarExp(Loc loc, Var var) +% AssignExp(Loc loc, Var var, Exp exp) +% \end{pygmented} +% \end{frame} + +\begin{frame} + \begin{center} + Fim + + % \texttt{Fim} + + % \texttt{\textbf{Fim}} + + % \textbf{\texttt{Fim}} + + % {This is big!} + + % {\smaller[3] This is big!} + \end{center} +\end{frame} + +\end{document} + +%%% Local Variables: +%%% mode: latex +%%% TeX-master: t +%%% End: diff --git a/eplan/doc/images/tree.dot b/eplan/doc/images/tree.dot new file mode 100644 index 0000000..66bca33 --- /dev/null +++ b/eplan/doc/images/tree.dot @@ -0,0 +1,22 @@ +digraph tree { + lbl8 [label="Anthony"]; + lbl6 [label="Peter"]; + lbl7 [label="Paul +Palucci"]; + lbl0 [label="Ann"]; + lbl1 [label="Mary"]; + lbl4 [label="Karen"]; + lbl5 [label="Steven +Abbot +Braddock"]; + lbl2 [label="John"]; + lbl3 [label="Avila"]; + lbl0 -> lbl1; + lbl1 -> lbl2; + lbl2 -> lbl3; + lbl1 -> lbl4; + lbl1 -> lbl5; + lbl0 -> lbl6; + lbl6 -> lbl7; + lbl6 -> lbl8; +} diff --git a/eplan/doc/images/tree.png b/eplan/doc/images/tree.png new file mode 100644 index 0000000000000000000000000000000000000000..d6b76a80c291fae3e84b24a3f484b70901b04737 GIT binary patch literal 44034 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 literal 0 HcmV?d00001 diff --git a/eplan/driver b/eplan/driver new file mode 100755 index 0000000..39eb0fb --- /dev/null +++ b/eplan/driver @@ -0,0 +1,12 @@ +#! /bin/sh + +if [ -x nixos-version ]; then + if nixos-version &>/dev/null; then + export LD_LIBRARY_PATH=/nix/store/2vcyb5n74xh8c97rb6pnr25cdyav9x0f-gcc-5.4.0/lib64 + fi +fi + +# export LC_NUMERIC=en_US-UTF-8 + +exec java -jar target/uber-eplan-0.1-SNAPSHOT.jar $@ + diff --git a/eplan/eplan-compiler.pdf b/eplan/eplan-compiler.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d062f00036162030452bca0f88975c3479546982 GIT binary patch literal 190282 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

gi4mrE5m5Dkt%0In&4o4qy|)?jWBNp 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�Xv-q0|f9)YFiZ?prS$ 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 literal 0 HcmV?d00001 diff --git a/eplan/pom.xml b/eplan/pom.xml new file mode 100644 index 0000000..a16fbbb --- /dev/null +++ b/eplan/pom.xml @@ -0,0 +1,145 @@ + + 4.0.0 + + br.ufop.decom.bcc328 + eplan + 0.1-SNAPSHOT + jar + + EPlan compiler + https://github.com/romildo/eplan + + + UTF-8 + 1.8 + 1.8 + + + + + com.beust + jcommander + 1.58 + + + + com.github.vbmacher + java-cup-runtime + 11b-20160615 + + + + org.apache.commons + commons-lang3 + 3.5 + + + + io.javaslang + javaslang + 2.0.5 + + + + io.javaslang + javaslang-render + 2.0.0 + + + + junit + junit + 4.12 + test + + + + org.assertj + assertj-core + 3.6.2 + test + + + + + + + de.jflex + jflex-maven-plugin + 1.6.1 + + + + generate + + + + + + + com.github.vbmacher + cup-maven-plugin + 11b-20160615 + + + + generate + + + + + parse + Parser + SymbolConstants + true + + true + + + + + org.apache.maven.plugins + maven-jar-plugin + 3.0.2 + + + + main.Driver + + + + + + + org.apache.maven.plugins + maven-shade-plugin + 3.0.0 + + + package + + shade + + + + + + main.Driver + + + + + + + uber-${project.artifactId}-${project.version} + + + + + + + diff --git a/eplan/run b/eplan/run new file mode 100755 index 0000000..95d3b41 --- /dev/null +++ b/eplan/run @@ -0,0 +1,21 @@ +#! /bin/sh + +F=unknown +IMGVIEWER=eog + +if command -v which >/dev/null 2>&1; then + rlwrap ./driver --box-annotated-ast --dot-annotated-ast $@ +else + ./driver $@ +fi || exit $? + +if command -v dot >/dev/null 2>&1; then + echo "Generating image of AST" + echo "-------------------------------------------------" + dot -O -Tpng $F.annotated.dot + if command -v $IMGVIEWER >/dev/null 2>&1; then + echo "View image of AST" + echo "-------------------------------------------------" + $IMGVIEWER $F.annotated.dot.png &> /dev/null + fi +fi diff --git a/eplan/src/main/cup/parser.cup b/eplan/src/main/cup/parser.cup new file mode 100644 index 0000000..ef83e71 --- /dev/null +++ b/eplan/src/main/cup/parser.cup @@ -0,0 +1,121 @@ +package parse; + +import error.ErrorHelper; +import java_cup.runtime.Symbol; +import java_cup.runtime.ComplexSymbolFactory.ComplexSymbol; +import javaslang.collection.List; +import absyn.*; + +parser code {: + public Parser(Lexer lex) { + this(lex, lex.getSymbolFactory()); + } + + private Loc loc(Location left, Location right) { + return Loc.loc(left, right); + } + + /* override error routines */ + private Loc locOfInfo(Object info) { + return info instanceof ComplexSymbol ? + Loc.loc((ComplexSymbol) info) : + info instanceof Symbol ? + Loc.loc((Symbol) info) : + Loc.loc(cur_token); + } + private String lexemeOfInfo(Object info) { + return info instanceof ComplexSymbol ? + " at '" + ((ComplexSymbol) info).getName() + "'" : + ""; + + } + public void report_fatal_error(String message, Object info) { + done_parsing(); + throw ErrorHelper.error(locOfInfo(info), "%s%s%nCan't recover from previous error(s), giving up.", message, lexemeOfInfo(info)); + } + public void report_error(String message, Object info) { + throw ErrorHelper.error(locOfInfo(info), "%s%s", message, lexemeOfInfo(info)); + } +:}; + +terminal String LITINT; +terminal String LITREAL; +terminal String LITBOOL; +terminal String ID; +terminal PLUS, MINUS, TIMES, DIV, UMINUS; +terminal AND, OR; +terminal LPAREN, RPAREN; +terminal COMMA, SEMICOLON; +terminal VAR, EQ, COLON; +terminal LET, IN; + +non terminal Exp program; +non terminal Exp exp; +non terminal List exps, expsRest; +non terminal List expseq, expseqRest; +non terminal Dec dec; +non terminal List decs; +non terminal Var var; + +precedence left OR; +precedence left AND; +precedence left PLUS, MINUS; +precedence left TIMES, DIV; +precedence left UMINUS; + +start with program; + +program ::= + exp:e {: RESULT = e; :} +; + +exp ::= + exp:x PLUS exp:y {: RESULT = new ExpBinOp(loc(xxleft,yxright), ExpBinOp.Op.PLUS, x, y); :} +| exp:x MINUS exp:y {: RESULT = new ExpBinOp(loc(xxleft,yxright), ExpBinOp.Op.MINUS, x, y); :} +| exp:x TIMES exp:y {: RESULT = new ExpBinOp(loc(xxleft,yxright), ExpBinOp.Op.TIMES, x, y); :} +| exp:x DIV exp:y {: RESULT = new ExpBinOp(loc(xxleft,yxright), ExpBinOp.Op.DIV, x, y); :} +| exp:x AND exp:y {: RESULT = new ExpBinOp(loc(xxleft,yxright), ExpBinOp.Op.AND, x, y); :} +| exp:x OR exp:y {: RESULT = new ExpBinOp(loc(xxleft,yxright), ExpBinOp.Op.OR, x, y); :} +| LITINT:x {: RESULT = new ExpInt(loc(xxleft,xxright), x); :} +| LITREAL:x {: RESULT = new ExpReal(loc(xxleft,xxright), x); :} +| LITBOOL:x {: RESULT = new ExpBool(loc(xxleft,xxright), x); :} +| MINUS:m exp:x {: RESULT = new ExpNegate(loc(mxleft,xxright), x); :} %prec UMINUS +| ID:f LPAREN exps:x RPAREN:r {: RESULT = new ExpCall(loc(fxleft,rxright), f, x); :} +| var:v {: RESULT = new ExpVar(loc(vxleft,vxright), v); :} +| LET:l decs:ds IN exp:b {: RESULT = new ExpLet(loc(lxleft,bxright), ds, b); :} +| LPAREN:l expseq:es RPAREN:r {: RESULT = new ExpSeq(loc(lxleft,rxright), es); :} +; + +exps ::= + /* empty */ {: RESULT = List.empty(); :} +| exp:x expsRest:xs {: RESULT = xs.prepend(x); :} +; + +expsRest ::= + /* empty */ {: RESULT = List.empty(); :} +| COMMA exp:x expsRest:xs {: RESULT = xs.prepend(x); :} +; + +expseq ::= + /* empty */ {: RESULT = List.empty(); :} +| exp:x expseqRest:xs {: RESULT = xs.prepend(x); :} +; + +expseqRest ::= + /* empty */ {: RESULT = List.empty(); :} +| SEMICOLON exp:x expseqRest:xs {: RESULT = xs.prepend(x); :} +; + +dec ::= + VAR:v ID:x COLON ID:t EQ exp:e {: RESULT = new DecVar(loc(vxleft,exright), x, t, e); :} +| VAR:v ID:x EQ exp:e {: RESULT = new DecVar(loc(vxleft,exright), x, null, e); :} +; + +decs ::= + dec:x {: RESULT = List.of(x); :} +| dec:x decs:xs {: RESULT = xs.prepend(x); :} +; + +var ::= + ID:v {: RESULT = new VarSimple(loc(vxleft,vxright), v); :} +; diff --git a/eplan/src/main/java/absyn/AST.java b/eplan/src/main/java/absyn/AST.java new file mode 100644 index 0000000..4663cb6 --- /dev/null +++ b/eplan/src/main/java/absyn/AST.java @@ -0,0 +1,22 @@ +package absyn; + +import javaslang.render.ToTree; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import parse.Loc; + +public abstract class AST implements ToTree { + + // Location where the phrase was found in the source code + protected final Loc loc; + + public AST(Loc loc) { + this.loc = loc; + } + + @Override + public String toString() { + return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE); + } + +} diff --git a/eplan/src/main/java/absyn/Dec.java b/eplan/src/main/java/absyn/Dec.java new file mode 100644 index 0000000..f29bb85 --- /dev/null +++ b/eplan/src/main/java/absyn/Dec.java @@ -0,0 +1,16 @@ +package absyn; + +import env.Env; +import parse.Loc; +import types.Type; + +public abstract class Dec extends AST { + + public Dec(Loc loc) { + super(loc); + } + + // Do semantic analysis of the declaraction + public abstract void semantic(Env env); + +} diff --git a/eplan/src/main/java/absyn/DecVar.java b/eplan/src/main/java/absyn/DecVar.java new file mode 100644 index 0000000..aff4870 --- /dev/null +++ b/eplan/src/main/java/absyn/DecVar.java @@ -0,0 +1,46 @@ +package absyn; + +import env.Env; +import javaslang.collection.List; +import javaslang.collection.Tree; +import parse.Loc; +import semantic.SemanticHelper; +import types.Type; + +public class DecVar extends Dec { + + public final String name; + public final String typeName; + public final Exp init; + + public DecVar(Loc loc, String name, String typeName, Exp init) { + super(loc); + this.name = name; + this.typeName = typeName; + this.init = init; + } + + @Override + public Tree.Node toTree() { + List> children = List.of(Tree.of(name)); + if (typeName != null) + children = children.append(Tree.of(typeName)); + children = children.append(init.toTree()); + return Tree.of("DecVar", children); + } + + @Override + public void semantic(Env env) { + Type t_init = init.semantic(env); + Type t_var = t_init; + if (typeName != null) { + Type t_typeName = env.tenv.get(typeName); + if (t_typeName == null) + throw SemanticHelper.undefined(loc, "type", typeName); + if (!t_init.is(t_typeName)) + throw SemanticHelper.typeMismatch(init.loc, t_init, t_typeName); + t_var = t_typeName; + } + env.venv.put(name, t_var); + } +} diff --git a/eplan/src/main/java/absyn/Exp.java b/eplan/src/main/java/absyn/Exp.java new file mode 100644 index 0000000..ee335f8 --- /dev/null +++ b/eplan/src/main/java/absyn/Exp.java @@ -0,0 +1,30 @@ +package absyn; + +import env.Env; +import parse.Loc; +import types.Type; + +public abstract class Exp extends AST { + + // Type of the expression, calculated by the semantic analyser + public Type type; + + public Exp(Loc loc) { + super(loc); + } + + // Obtain the type of the expression as a string prefixed by the given text. + protected String annotateType(String text) { + final String theType = type == null ? "" : "\n<" + type + ">"; + return text + theType; + } + + // Do semantic analysis of the expression + public Type semantic(Env env) { + type = semantic_(env); + return type; + } + + // Type check the expression. Should be defined in the concrete subclasses. + protected abstract Type semantic_(Env env); +} diff --git a/eplan/src/main/java/absyn/ExpBinOp.java b/eplan/src/main/java/absyn/ExpBinOp.java new file mode 100644 index 0000000..dce0d7d --- /dev/null +++ b/eplan/src/main/java/absyn/ExpBinOp.java @@ -0,0 +1,74 @@ +package absyn; + +import env.Env; +import error.ErrorHelper; +import javaslang.collection.Tree; +import parse.Loc; +import types.BOOL; +import types.INT; +import types.REAL; +import types.Type; + +import static error.ErrorHelper.fatal; +import static semantic.SemanticHelper.*; + +public class ExpBinOp extends Exp { + + public enum Op { + PLUS, MINUS, TIMES, DIV, + AND, OR + } + + public final Op op; + public final Exp left; + public final Exp right; + + public ExpBinOp(Loc loc, Op op, Exp left, Exp right) { + super(loc); + this.op = op; + this.left = left; + this.right = right; + } + + @Override + public Tree.Node toTree() { + return Tree.of(annotateType("ExpBinOp: " + op), left.toTree(), right.toTree()); + } + + @Override + protected Type semantic_(Env env) { + final Type t_left = left.semantic(env); + final Type t_right = right.semantic(env); + + switch (op) { + case PLUS: + case MINUS: + case TIMES: + case DIV: + if (!t_left.is(INT.T, REAL.T)) + throw typeMismatch(left.loc, t_left, INT.T, REAL.T); + + if (!t_right.is(INT.T, REAL.T)) + throw typeMismatch(right.loc, t_right, INT.T, REAL.T); + + if (t_left.is(REAL.T) || t_right.is(REAL.T)) + return REAL.T; + + return INT.T; + + case AND: + case OR: + if (!t_left.is(BOOL.T)) + throw typeMismatch(left.loc, t_left, BOOL.T); + + if (!t_right.is(BOOL.T)) + throw typeMismatch(right.loc, t_right, BOOL.T); + + return BOOL.T; + + default: + throw fatal("unexpected invalid operator: %s", op); + } + } + +} diff --git a/eplan/src/main/java/absyn/ExpBool.java b/eplan/src/main/java/absyn/ExpBool.java new file mode 100644 index 0000000..68d77bd --- /dev/null +++ b/eplan/src/main/java/absyn/ExpBool.java @@ -0,0 +1,27 @@ +package absyn; + +import env.Env; +import javaslang.collection.Tree; +import parse.Loc; +import types.BOOL; +import types.Type; + +public class ExpBool extends Exp { + + public final String value; + + public ExpBool(Loc loc, String value) { + super(loc); + this.value = value; + } + + @Override + public Tree.Node toTree() { + return Tree.of(annotateType("ExpBool: " + value)); + } + + @Override + protected Type semantic_(Env env) { + return BOOL.T; + } +} diff --git a/eplan/src/main/java/absyn/ExpCall.java b/eplan/src/main/java/absyn/ExpCall.java new file mode 100644 index 0000000..eaf1049 --- /dev/null +++ b/eplan/src/main/java/absyn/ExpCall.java @@ -0,0 +1,73 @@ +package absyn; + +import env.Env; +import javaslang.collection.List; +import javaslang.collection.Tree; +import parse.Loc; +import types.FUNCTION; +import types.Type; + +import static semantic.SemanticHelper.*; + + +public class ExpCall extends Exp { + + public final String function; + public final List args; + + public ExpCall(Loc loc, String function, List args) { + super(loc); + this.function = function; + this.args = args; + } + + @Override + public Tree.Node toTree() { + return Tree.of(annotateType("ExpCall"), + Tree.of(function.toString()), + Tree.of("args", + args.map(Exp::toTree))); + } + + @Override + protected Type semantic_(Env env) { + // analyse all arguments + List t_args = args.map(exp -> exp.semantic(env)); + // search the function name in the environment + Type entry = env.venv.get(function); + // check whether it was found and report error if not found + if (entry == null) + throw undefined(loc, "function", function); + // check whether it really names a function + if (!(entry instanceof FUNCTION)) + throw notAFunction(loc, function); + // it is a function, so get a more specific version of the entry + FUNCTION signature = (FUNCTION) entry; + // check the arguments: walk the list of parameters and the list of + // arguments in parallel, checking each argument + // it finishes when the end of any of the lists are reached + List parameters = signature.formals; + List arguments = args; + List t_arguments = t_args; + while (parameters.nonEmpty() && arguments.nonEmpty()) { + Exp arg = arguments.head(); + Type t_arg = t_arguments.head(); + Type t_par = parameters.head(); + // are the argument of the expected type? + if (!t_arg.is(t_par)) + throw typeMismatch(arg.loc, t_arg, t_par); + // advances to the next argument + parameters = parameters.tail(); + arguments = arguments.tail(); + t_arguments = t_arguments.tail(); + } + // at the end there may be more arguments... + if (arguments.nonEmpty()) + throw tooMuchArguments(loc, function); + // ... or more parameters + if (parameters.nonEmpty()) + throw tooFewArguments(loc, function); + return signature.result; + } + +} diff --git a/eplan/src/main/java/absyn/ExpInt.java b/eplan/src/main/java/absyn/ExpInt.java new file mode 100644 index 0000000..24d6b77 --- /dev/null +++ b/eplan/src/main/java/absyn/ExpInt.java @@ -0,0 +1,27 @@ +package absyn; + +import env.Env; +import javaslang.collection.Tree; +import parse.Loc; +import types.INT; +import types.Type; + +public class ExpInt extends Exp { + + public final String value; + + public ExpInt(Loc loc, String value) { + super(loc); + this.value = value; + } + + @Override + public Tree.Node toTree() { + return Tree.of(annotateType("ExpInt: " + value)); + } + + @Override + protected Type semantic_(Env env) { + return INT.T; + } +} diff --git a/eplan/src/main/java/absyn/ExpLet.java b/eplan/src/main/java/absyn/ExpLet.java new file mode 100644 index 0000000..d7f0a66 --- /dev/null +++ b/eplan/src/main/java/absyn/ExpLet.java @@ -0,0 +1,38 @@ +package absyn; + +import env.Env; +import javaslang.collection.List; +import javaslang.collection.Tree; +import parse.Loc; +import types.Type; + +public class ExpLet extends Exp { + + public final List decs; + public final Exp body; + + public ExpLet(Loc loc, List decs, Exp body) { + super(loc); + this.decs = decs; + this.body = body; + } + + @Override + public Tree.Node toTree() { + return Tree.of(annotateType("ExpLet"), + Tree.of("Decs", + decs.map(Dec::toTree)), + body.toTree()); + } + + @Override + protected Type semantic_(Env env) { + env.tenv.beginScope();; + env.venv.beginScope(); + decs.forEach(d -> d.semantic(env)); + Type t_body = body.semantic(env); + env.tenv.endScope(); + env.venv.endScope(); + return t_body; + } +} diff --git a/eplan/src/main/java/absyn/ExpNegate.java b/eplan/src/main/java/absyn/ExpNegate.java new file mode 100644 index 0000000..c6bd4dc --- /dev/null +++ b/eplan/src/main/java/absyn/ExpNegate.java @@ -0,0 +1,37 @@ +package absyn; + +import env.Env; +import javaslang.collection.Tree; +import parse.Loc; +import types.INT; +import types.REAL; +import types.Type; + +import static error.ErrorHelper.*; +import static semantic.SemanticHelper.*; + +public class ExpNegate extends Exp { + + public final Exp arg; + + public ExpNegate(Loc loc, Exp arg) { + super(loc); + this.arg = arg; + } + + @Override + public Tree.Node toTree() { + return Tree.of(annotateType("ExpNegate"), arg.toTree()); + } + + @Override + protected Type semantic_(Env env) { + final Type t_arg = arg.semantic(env); + + if (t_arg instanceof INT || t_arg instanceof REAL) + return t_arg; + + throw typeMismatch(arg.loc, t_arg, INT.T, REAL.T); + } + +} diff --git a/eplan/src/main/java/absyn/ExpReal.java b/eplan/src/main/java/absyn/ExpReal.java new file mode 100644 index 0000000..14e500f --- /dev/null +++ b/eplan/src/main/java/absyn/ExpReal.java @@ -0,0 +1,27 @@ +package absyn; + +import env.Env; +import javaslang.collection.Tree; +import parse.Loc; +import types.REAL; +import types.Type; + +public class ExpReal extends Exp { + + public final String value; + + public ExpReal(Loc loc, String value) { + super(loc); + this.value = value; + } + + @Override + public Tree.Node toTree() { + return Tree.of(annotateType("ExpReal: " + value)); + } + + @Override + protected Type semantic_(Env env) { + return REAL.T; + } +} diff --git a/eplan/src/main/java/absyn/ExpSeq.java b/eplan/src/main/java/absyn/ExpSeq.java new file mode 100644 index 0000000..0562914 --- /dev/null +++ b/eplan/src/main/java/absyn/ExpSeq.java @@ -0,0 +1,33 @@ +package absyn; + +import env.Env; +import javaslang.collection.List; +import javaslang.collection.Tree; +import parse.Loc; +import types.Type; +import types.UNIT; + +public class ExpSeq extends Exp { + + public final List exps; + + public ExpSeq(Loc loc, List exps) { + super(loc); + this.exps = exps; + } + + @Override + public Tree.Node toTree() { + return Tree.of(annotateType("ExpSeq"), + exps.map(Exp::toTree)); + } + + @Override + protected Type semantic_(Env env) { + Type t = UNIT.T; + for (Exp e : exps) + t = e.semantic_(env); + return t; + } + +} diff --git a/eplan/src/main/java/absyn/ExpVar.java b/eplan/src/main/java/absyn/ExpVar.java new file mode 100644 index 0000000..b445549 --- /dev/null +++ b/eplan/src/main/java/absyn/ExpVar.java @@ -0,0 +1,28 @@ +package absyn; + +import env.Env; +import javaslang.collection.Tree; +import parse.Loc; +import types.INT; +import types.Type; + +public class ExpVar extends Exp { + + public final Var variable; + + public ExpVar(Loc loc, Var variable) { + super(loc); + this.variable = variable; + } + + @Override + public Tree.Node toTree() { + return Tree.of(annotateType("ExpVar"), + variable.toTree()); + } + + @Override + protected Type semantic_(Env env) { + return variable.semantic(env); + } +} diff --git a/eplan/src/main/java/absyn/Var.java b/eplan/src/main/java/absyn/Var.java new file mode 100644 index 0000000..9dd9988 --- /dev/null +++ b/eplan/src/main/java/absyn/Var.java @@ -0,0 +1,30 @@ +package absyn; + +import env.Env; +import parse.Loc; +import types.Type; + +public abstract class Var extends AST { + + // Type of the expression, calculated by the semantic analyser + public Type type; + + public Var(Loc loc) { + super(loc); + } + + // Obtain the type of the expression as a string prefixed by the given text. + protected String annotateType(String text) { + final String theType = type == null ? "" : "\n<" + type + ">"; + return text + theType; + } + + // Do semantic analysis of the expression + public Type semantic(Env env) { + type = semantic_(env); + return type; + } + + // Type check the expression. Should be defined in the concrete subclasses. + protected abstract Type semantic_(Env env); +} diff --git a/eplan/src/main/java/absyn/VarSimple.java b/eplan/src/main/java/absyn/VarSimple.java new file mode 100644 index 0000000..3bd4efc --- /dev/null +++ b/eplan/src/main/java/absyn/VarSimple.java @@ -0,0 +1,32 @@ +package absyn; + +import env.Env; +import javaslang.collection.Tree; +import parse.Loc; +import semantic.SemanticHelper; +import types.INT; +import types.Type; + +public class VarSimple extends Var { + + public final String name; + + public VarSimple(Loc loc, String name) { + super(loc); + this.name = name; + } + + @Override + public Tree.Node toTree() { + return Tree.of(annotateType("VarSimple: " + name)); + } + + @Override + protected Type semantic_(Env env) { + Type t = env.venv.get(name); + if (t == null) + throw SemanticHelper.undefined(loc, "variable", name); + return t; + } + +} diff --git a/eplan/src/main/java/env/Env.java b/eplan/src/main/java/env/Env.java new file mode 100644 index 0000000..dcb3547 --- /dev/null +++ b/eplan/src/main/java/env/Env.java @@ -0,0 +1,41 @@ +package env; + +import types.*; + +public class Env { + + public Table tenv; + public Table venv; + + public Env() { + tenv = new Table(); + put(tenv, "unit", UNIT.T); + put(tenv, "int", INT.T); + put(tenv, "real", REAL.T); + put(tenv, "bool", BOOL.T); + + venv = new Table(); + put(venv, "print_int", new FUNCTION(UNIT.T, INT.T)); + put(venv, "print_real", new FUNCTION(UNIT.T, REAL.T)); + put(venv, "print_unit", new FUNCTION(UNIT.T, UNIT.T)); + put(venv, "print_bool", new FUNCTION(UNIT.T, BOOL.T)); + put(venv, "round", new FUNCTION(INT.T, REAL.T)); + put(venv, "ceil", new FUNCTION(INT.T, REAL.T)); + put(venv, "floor", new FUNCTION(INT.T, REAL.T)); + put(venv, "real", new FUNCTION(REAL.T, INT.T)); + put(venv, "not", new FUNCTION(BOOL.T, BOOL.T)); + } + + @Override + public String toString() { + return "Env{" + + "tenv=" + tenv + + ", venv=" + venv + + '}'; + } + + private static void put(Table table, String name, E value) { + table.put(name.intern(), value); + } + +} diff --git a/eplan/src/main/java/env/Table.java b/eplan/src/main/java/env/Table.java new file mode 100644 index 0000000..ec2e0b0 --- /dev/null +++ b/eplan/src/main/java/env/Table.java @@ -0,0 +1,83 @@ +package env; + +import java.util.IdentityHashMap; +import java.util.Map; +import java.util.Set; + +class Binder { + V value; + String prevtop; + Binder tail; + + Binder(V v, String p, Binder t) { + value = v; + prevtop = p; + tail = t; + } +} + +/** + * The Table class is similar to java.util.Dictionary, except that each key must + * be a symbol and there is a scope mechanism. + */ + +public class Table { + private Map> dict; + private String top; + private Binder marks; + + public Table() { + dict = new IdentityHashMap>(); + } + + /** + * Gets the object associated with the specified symbol in the Table. + */ + public V get(String key) { + Binder e = dict.get(key); + if (e == null) + return null; + else + return e.value; + } + + /** + * Puts the specified value into the Table, bound to the specified symbol. + */ + public void put(String key, V value) { + dict.put(key, new Binder(value, top, dict.get(key))); + top = key; + } + + /** + * Remembers the current state of the Table. + */ + public void beginScope() { + marks = new Binder(null, top, marks); + top = null; + } + + /** + * Restores the table to what it was at the most recent beginScope that has + * not already been ended. + */ + public void endScope() { + while (top != null) { + Binder e = dict.get(top); + if (e.tail != null) + dict.put(top, e.tail); + else + dict.remove(top); + top = e.prevtop; + } + top = marks.prevtop; + marks = marks.tail; + } + + /** + * Returns a Set view of the Table's symbols. + */ + public Set keySet() { + return dict.keySet(); + } +} diff --git a/eplan/src/main/java/error/CompilerError.java b/eplan/src/main/java/error/CompilerError.java new file mode 100644 index 0000000..3b20a1a --- /dev/null +++ b/eplan/src/main/java/error/CompilerError.java @@ -0,0 +1,18 @@ +package error; + +import parse.Loc; + +public class CompilerError extends RuntimeException { + + public CompilerError(String message) { + super(message); + } + + public CompilerError(String format, Object... args) { + this(String.format(format, args)); + } + + public CompilerError(Loc loc, String format, Object... args) { + this(loc + " " + String.format(format, args)); + } +} diff --git a/eplan/src/main/java/error/ErrorHelper.java b/eplan/src/main/java/error/ErrorHelper.java new file mode 100644 index 0000000..6bd33c2 --- /dev/null +++ b/eplan/src/main/java/error/ErrorHelper.java @@ -0,0 +1,23 @@ +package error; + +import parse.Loc; + +public interface ErrorHelper { + + static CompilerError error(String message) { + return new CompilerError(message); + } + + static CompilerError error(String format, Object... args) { + return error(String.format(format, args)); + } + + static CompilerError error(Loc loc, String format, Object... args) { + return error(loc + " " + String.format(format, args)); + } + + static FatalError fatal(String format, Object... args) { + return new FatalError(format, args); + } + +} diff --git a/eplan/src/main/java/error/FatalError.java b/eplan/src/main/java/error/FatalError.java new file mode 100644 index 0000000..84485d4 --- /dev/null +++ b/eplan/src/main/java/error/FatalError.java @@ -0,0 +1,13 @@ +package error; + +public class FatalError extends RuntimeException { + + public FatalError(String message) { + super("fatal: " + message); + } + + public FatalError(String format, Object... args) { + this(String.format(format, args)); + } + +} diff --git a/eplan/src/main/java/main/Driver.java b/eplan/src/main/java/main/Driver.java new file mode 100644 index 0000000..57edd8b --- /dev/null +++ b/eplan/src/main/java/main/Driver.java @@ -0,0 +1,189 @@ +package main; + +import java.io.FileReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.Reader; +import java.util.ArrayList; +import java.util.List; + +import absyn.AST; +import absyn.Exp; +import com.beust.jcommander.JCommander; +import com.beust.jcommander.Parameter; +import com.beust.jcommander.ParameterException; +import error.CompilerError; +import java_cup.runtime.Symbol; +import javaslang.render.dot.DotFile; +import javaslang.render.text.Boxes; +import javaslang.render.text.PrettyPrinter; +import parse.SymbolConstants; +import parse.Lexer; +import parse.Parser; + +import static error.ErrorHelper.fatal; + +// command line options +class DriverOptions { + @Parameter(description = "") + public List parameters = new ArrayList<>(); + + @Parameter(names = {"--help", "-h"}, description = "Usage help", help = true) + public boolean help = false; + + @Parameter(names = {"--lexer"}, description = "Lexical analysis") + public boolean lexer = false; + + @Parameter(names = {"--parser"}, description = "Syntax analysis") + public boolean parser = true; + + @Parameter(names = {"--pp-ast"}, description = "Pretty print syntax tree") + public boolean pp_ast = false; + + @Parameter(names = {"--pp-anotated-ast"}, description = "Pretty print annotated syntax tree") + public boolean pp_annotated_ast = false; + + @Parameter(names = {"--box-ast"}, description = "Boxed syntax tree") + public boolean box_ast = false; + + @Parameter(names = {"--box-annotated-ast"}, description = "Boxed annotated syntax tree") + public boolean box_annotated_ast = true; + + @Parameter(names = {"--dot-ast"}, description = "Generate dot file of syntax tree") + public boolean dot_ast = false; + + @Parameter(names = {"--dot-annotated-ast"}, description = "Generate dot file of annotated syntax tree") + public boolean dot_annotted_ast = true; +} + +// main +public class Driver { + + public static void main(String[] args) { + // parse command line options + final DriverOptions options = new DriverOptions(); + final JCommander jCommander = new JCommander(options); + jCommander.setProgramName("Driver"); + + try { + jCommander.parse(args); + } + catch (ParameterException e) { + System.out.println(e.getMessage()); + jCommander.usage(); + System.exit(1); + } + + if (options.help) { + jCommander.usage(); + return; + } + + Reader input = null; + String name = null; + try { + // set the input (source code) to compile + if (options.parameters.isEmpty()) { + name = "unknown"; + input = new InputStreamReader(System.in); + } + else { + name = options.parameters.get(0); + input = new FileReader(name); + } + + // do only lexical analyses + if (options.lexer) + lexicalAnalysis(name, input); + + // do only lexical analyses + if (options.parser) + syntaxAnalysis(options, name, input); + } + catch (CompilerError e) { + System.out.println(e.getMessage()); + System.exit(3); + } + catch (IOException e) { + System.out.println(e.getMessage()); + System.exit(2); + } + catch (Exception e) { + System.out.println(e.getMessage()); + e.printStackTrace(); + System.exit(3); + } + finally { + // closes the input file + if (input instanceof FileReader) + try { + input.close(); + } + catch (IOException e) { + System.out.println(e.getMessage()); + System.exit(4); + } + } + } + + public static void lexicalAnalysis(String name, Reader input) throws IOException { + final Lexer lexer = new Lexer(input, "unknown"); + Symbol tok; + do { + tok = lexer.next_token(); + System.out.printf("%-55s %-8s %s%n", + tok, + SymbolConstants.terminalNames[tok.sym], + tok.value == null ? "" : tok.value); + } while (tok.sym != SymbolConstants.EOF); + } + + public static void syntaxAnalysis(DriverOptions options, String name, Reader input) throws Exception { + final Lexer lexer = new Lexer(input, "unknown"); + final Parser parser = new Parser(lexer); + final Symbol result = parser.parse(); + //System.out.println(result); + + if (!(result.value instanceof AST)) + throw fatal("internal error: program should be an AST"); + + final AST parseTree = (AST) result.value; + if (options.pp_ast) { + System.out.println("===Abstract syntax tree:==========="); + System.out.println(); + System.out.println(PrettyPrinter.pp(parseTree.toTree())); + System.out.println(); + } + if (options.box_ast) { + System.out.println("===Abstract syntax tree:==========="); + System.out.println(); + System.out.println(Boxes.box(parseTree.toTree())); + System.out.println(); + } + if (options.dot_ast) { + DotFile.write(parseTree.toTree(), name + ".dot"); + } + + if (!(parseTree instanceof Exp)) + throw fatal("internal error: program should be an expression"); + + final Exp main = (Exp) parseTree; + main.semantic(new env.Env()); + if (options.pp_annotated_ast) { + System.out.println("===Annotated abstract syntax tree:==========="); + System.out.println(); + System.out.println(PrettyPrinter.pp(parseTree.toTree())); + System.out.println(); + } + if (options.box_annotated_ast) { + System.out.println("===Annotated abstract syntax tree:==========="); + System.out.println(); + System.out.println(Boxes.box(parseTree.toTree())); + System.out.println(); + } + if (options.dot_annotted_ast) { + DotFile.write(parseTree.toTree(), name + ".annotated.dot"); + } + } + +} diff --git a/eplan/src/main/java/main/SemantGui.java b/eplan/src/main/java/main/SemantGui.java new file mode 100644 index 0000000..0962e84 --- /dev/null +++ b/eplan/src/main/java/main/SemantGui.java @@ -0,0 +1,278 @@ +package main; + +import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.Container; +import java.awt.Font; +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; +import java.awt.GridLayout; +import java.awt.Insets; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.io.StringReader; +import javax.swing.*; +import javax.swing.tree.DefaultTreeModel; + +import error.CompilerError; +import java_cup.runtime.Symbol; +import javaslang.render.dot.DotFile; +import parse.Lexer; +import parse.Parser; +import absyn.Exp; + +@SuppressWarnings("serial") +public class SemantGui extends JFrame implements ActionListener { + private GridBagLayout layout = new GridBagLayout(); + private GridBagConstraints constraints = new GridBagConstraints(); + + private JButton openButton; + private JTextField fileField; + private JFileChooser chooser; + private JTextArea programArea; + private JTextArea logArea; + private JButton saveButton; + private JButton compileButton; + private JButton asyButton; + private JButton quitButton; + private JTree tree; + private JDialog dialog; + private JButton dialogClose; + + private Exp exp; + + public SemantGui() { + super("Panda Compiler"); + setLayout(new BorderLayout()); + + JToolBar toolBar = new JToolBar(); + toolBar.setFloatable(false); + toolBar.setRollover(true); + add(toolBar, BorderLayout.PAGE_START); + + JPanel panel_ = new JPanel(); + panel_.setLayout(new BoxLayout(panel_, BoxLayout.PAGE_AXIS)); + add(panel_, BorderLayout.CENTER); + + JLabel label = new JLabel("Source File:"); + label.setDisplayedMnemonic('F'); + toolBar.add(label); + + fileField = new JTextField(25); + label.setLabelFor(fileField); + fileField.addActionListener(this); + toolBar.add(fileField); + + openButton = new JButton("Browse"); + openButton.setMnemonic('B'); + openButton.addActionListener(this); + toolBar.add(openButton); + + toolBar.addSeparator(); + + saveButton = new JButton("Save"); + saveButton.setMnemonic('S'); + saveButton.addActionListener(this); + toolBar.add(saveButton); + + compileButton = new JButton("Compile"); + compileButton.setMnemonic('C'); + compileButton.addActionListener(this); + toolBar.add(compileButton); + + asyButton = new JButton("Show Tree"); + asyButton.setMnemonic('T'); + asyButton.addActionListener(this); + toolBar.add(asyButton); + + toolBar.addSeparator(); + + quitButton = new JButton("Quit"); + quitButton.setMnemonic('Q'); + quitButton.addActionListener(this); + toolBar.add(quitButton); + + chooser = new JFileChooser(); + + label = new JLabel("Program Source Code"); + label.setDisplayedMnemonic('P'); + panel_.add(label); + programArea = new JTextArea(12, 80); + programArea.setFont(new Font("Courier", Font.BOLD, 22)); + JScrollPane scrollPane = new JScrollPane(programArea); + label.setLabelFor(scrollPane); + panel_.add(scrollPane); + + label = new JLabel("Compiler Messages"); + label.setDisplayedMnemonicIndex(9); + panel_.add(label); + logArea = new JTextArea(5, 80); + scrollPane = new JScrollPane(logArea); + label.setLabelFor(scrollPane); + logArea.setFont(new Font("Courier", Font.BOLD, 22)); + panel_.add(scrollPane); + + JPanel panel = new JPanel(new GridLayout(1, 4)); + panel_.add(panel); + + label = new JLabel("Abstract Syntax Tree"); + label.setDisplayedMnemonicIndex(0); + panel_.add(label); + tree = new JTree(new DefaultTreeModel(null)); + tree.setFont(new Font("Courier", Font.BOLD, 22)); + scrollPane = new JScrollPane(tree); + label.setLabelFor(scrollPane); + panel_.add(scrollPane); + + pack(); + } + + private void addComponent(Container container, Component component, int row, int column, int width, int height, + int fill) { + constraints.gridx = column; + constraints.gridy = row; + constraints.gridwidth = width; + constraints.gridheight = height; + constraints.fill = fill; + constraints.weightx = 1; + constraints.weighty = 1; + constraints.insets = new Insets(2, 2, 2, 2); + layout.setConstraints(component, constraints); + container.add(component); + } + + public static void main(String args[]) throws Exception { + SemantGui application = new SemantGui(); + application.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); + application.setVisible(true); + } + + private void readSource() { + try { + FileReader file = new FileReader(fileField.getText()); + StringBuilder str = new StringBuilder(); + while (true) { + int ch = file.read(); + if (ch == -1) + break; + str.append((char) ch); + } + file.close(); + programArea.setText(str.toString()); + } + catch (FileNotFoundException e1) { + JOptionPane.showMessageDialog(SemantGui.this, "File not found:\n" + fileField.getText(), + "CompError reading file", JOptionPane.ERROR_MESSAGE); + } + catch (IOException e2) { + JOptionPane.showMessageDialog(SemantGui.this, "CompError reading file:\n" + fileField.getText(), + "CompError reading file", JOptionPane.ERROR_MESSAGE); + } + } + + public void actionPerformed(ActionEvent e) { + if (e.getSource() == openButton) { + int returnVal = chooser.showOpenDialog(SemantGui.this); + if (returnVal == JFileChooser.APPROVE_OPTION) + fileField.setText(chooser.getSelectedFile().getPath()); + readSource(); + } + if (e.getSource() == saveButton) { + String filePath = fileField.getText().trim(); + if (!filePath.isEmpty()) + chooser.setSelectedFile(new File(filePath)); + int returnVal = chooser.showSaveDialog(SemantGui.this); + if (returnVal == JFileChooser.APPROVE_OPTION) { + filePath = chooser.getSelectedFile().getPath(); + try { + FileWriter file = new FileWriter(filePath); + file.write(programArea.getText()); + file.close(); + fileField.setText(filePath); + } + catch (IOException e1) { + JOptionPane.showMessageDialog(SemantGui.this, + "CompError writing file:\n" + filePath, + "CompError writing file", + JOptionPane.ERROR_MESSAGE); + } + } + } + else if (e.getSource() == fileField) + readSource(); + else if (e.getSource() == compileButton) + compileProgram(); + else if (e.getSource() == asyButton) + asyGraph(); + else if (e.getSource() == dialogClose) + dialog.dispose(); + else if (e.getSource() == quitButton) + dispose(); + } + + private void compileProgram() { + StringReader file = new StringReader(programArea.getText()); + Lexer scanner = new Lexer(file, fileField.getText()); + Parser parser = new Parser(scanner, scanner.getSymbolFactory()); + try { + logArea.setText(""); + Symbol prog = parser.parse(); + exp = (Exp) prog.value; + DefaultTreeModel treeModel = new DefaultTreeModel(javaslang.render.swing.Tree.create(exp.toTree())); + tree.setModel(treeModel); + for (int row = 0; row < tree.getRowCount(); row++) + tree.expandRow(row); + types.Type et = exp.semantic(new env.Env()); + logArea.append("===> " + et.toString() + "\n"); + } + catch (CompilerError e) { + logArea.append(e.getMessage()); + } + catch (Exception e) { + JOptionPane.showMessageDialog(SemantGui.this, + "Error compiling program\n", + "Internal error compiling program\n" + + e.getStackTrace(), + JOptionPane.ERROR_MESSAGE); + } + + } + + private void asyGraph() { + if (exp != null) + try { + String imageType = "png"; + File tempfile = File.createTempFile("parsetree-", ".asy"); + tempfile.deleteOnExit(); + DotFile.write(exp.toTree(), tempfile); + File tempfile2 = File.createTempFile("parsetree-", "." + imageType); + tempfile2.deleteOnExit(); + String cmd[] = {"dot", "-Tpng", "-o", tempfile2.getPath(), tempfile.getPath()}; + Process proc = Runtime.getRuntime().exec(cmd, null, tempfile.getParentFile()); + proc.waitFor(); + dialog = new JDialog(SemantGui.this, "parse Tree"); + dialog.setLayout(layout); + Icon icon = new ImageIcon(tempfile2.getPath()); + JLabel label = new JLabel(icon); + JScrollPane scrollPane = new JScrollPane(label); + addComponent(dialog, scrollPane, 0, 0, 1, 1, GridBagConstraints.BOTH); + dialogClose = new JButton("Close"); + dialogClose.addActionListener(this); + addComponent(dialog, dialogClose, 1, 0, 1, 1, GridBagConstraints.NONE); + dialog.pack(); + dialog.setVisible(true); + } + catch (Exception e) { + JOptionPane.showMessageDialog(SemantGui.this, + "Error creating asy graph\n", + "Cannot create asy graph\n" + + e.getStackTrace(), + JOptionPane.ERROR_MESSAGE); + } + } +} diff --git a/eplan/src/main/java/parse/Loc.java b/eplan/src/main/java/parse/Loc.java new file mode 100644 index 0000000..933bacd --- /dev/null +++ b/eplan/src/main/java/parse/Loc.java @@ -0,0 +1,64 @@ +package parse; + +import java_cup.runtime.ComplexSymbolFactory.Location; +import java_cup.runtime.ComplexSymbolFactory.ComplexSymbol; +import java_cup.runtime.Symbol; + +public class Loc { + + public final Location left; + public final Location right; + + private Loc(Location left, Location right) { + this.left = left; + this.right = right; + } + + public static Loc loc() { + return loc(new Location(-1, -1)); + } + + public static Loc loc(Location left) { + return loc(left, left); + } + + public static Loc loc(Location left, Location right) { + return new Loc(left, right); + } + + public static Loc loc(Symbol symbol) { + return loc(new Location(symbol.left, symbol.right)); + } + + public static Loc loc(Symbol a, Symbol b) { + return loc(new Location(a.left, b.right)); + } + + public static Loc loc(ComplexSymbol symbol) { + return new Loc(symbol.getLeft(), symbol.getRight()); + } + + public static Loc loc(ComplexSymbol a, ComplexSymbol b) { + return new Loc(a.getLeft(), b.getRight()); + } + + @Override + public String toString() { + if (left.getUnit().equals("unknown") && right.getUnit().equals("unknown")) + return String.format("%d/%d-%d/%d", + left.getLine(), left.getColumn(), + right.getLine(), right.getColumn()); + else if (left.getUnit().equals(right.getUnit())) + return String.format("%s:%d/%d-%d/%d", + left.getUnit(), + left.getLine(), left.getColumn(), + right.getLine(), right.getColumn()); + else + return String.format("%s:%d/%d-%s:%d/%d", + left.getUnit(), + left.getLine(), left.getColumn(), + right.getUnit(), + right.getLine(), right.getColumn()); + } + +} diff --git a/eplan/src/main/java/semantic/SemanticHelper.java b/eplan/src/main/java/semantic/SemanticHelper.java new file mode 100644 index 0000000..7009f97 --- /dev/null +++ b/eplan/src/main/java/semantic/SemanticHelper.java @@ -0,0 +1,40 @@ +package semantic; + +import error.CompilerError; + +import parse.Loc; +import types.Type; + +public interface SemanticHelper { + + static CompilerError typeMismatch(Loc loc, Type found, Type... expected) { + final StringBuilder builder = new StringBuilder(); + final int n = expected.length; + if (n > 0) { + builder.append(expected[0]); + if (n > 1) { + for (int i = 1; i < n - 2; i++) + builder.append(", ").append(expected[i]); + builder.append(" or ").append(expected[n - 1]); + } + } + return new CompilerError(loc, "type mismatch: found %s but expected %s", found, builder); + } + + static CompilerError undefined(Loc loc, String category, String name) { + return new CompilerError(loc, "undefined %s '%s'", category, name); + } + + static CompilerError notAFunction(Loc loc, String name) { + return new CompilerError(loc, "'%s' is not a function", name); + } + + static CompilerError tooFewArguments(Loc loc, String name) { + return new CompilerError(loc, "too few arguments in call to '%s'", name); + } + + static CompilerError tooMuchArguments(Loc loc, String name) { + return new CompilerError(loc, "too much arguments in call to '%s'", name); + } + +} diff --git a/eplan/src/main/java/types/BOOL.java b/eplan/src/main/java/types/BOOL.java new file mode 100644 index 0000000..cb848a2 --- /dev/null +++ b/eplan/src/main/java/types/BOOL.java @@ -0,0 +1,14 @@ +package types; + +public class BOOL extends Type { + + public static final BOOL T = new BOOL(); + + private BOOL() { + } + + @Override + public String toString() { + return "bool"; + } +} diff --git a/eplan/src/main/java/types/FUNCTION.java b/eplan/src/main/java/types/FUNCTION.java new file mode 100644 index 0000000..4324891 --- /dev/null +++ b/eplan/src/main/java/types/FUNCTION.java @@ -0,0 +1,29 @@ +package types; + +import javaslang.collection.List; + +public class FUNCTION extends Type { + + public Type result; + public List formals; + + public FUNCTION(Type result, List formals) { + this.result = result; + this.formals = formals; + } + + public FUNCTION(Type result, Type... formals) { + this(result, List.of(formals)); + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("("); + formals.map(Type::toString).intersperse(","); + builder.append("->"); + builder.append(result.toString()); + return builder.toString(); + } + +} diff --git a/eplan/src/main/java/types/INT.java b/eplan/src/main/java/types/INT.java new file mode 100644 index 0000000..af4cf00 --- /dev/null +++ b/eplan/src/main/java/types/INT.java @@ -0,0 +1,14 @@ +package types; + +public class INT extends Type { + + public static final INT T = new INT(); + + private INT() { + } + + @Override + public String toString() { + return "int"; + } +} diff --git a/eplan/src/main/java/types/REAL.java b/eplan/src/main/java/types/REAL.java new file mode 100644 index 0000000..e4a7188 --- /dev/null +++ b/eplan/src/main/java/types/REAL.java @@ -0,0 +1,14 @@ +package types; + +public class REAL extends Type { + + public static final REAL T = new REAL(); + + private REAL() { + } + + @Override + public String toString() { + return "real"; + } +} diff --git a/eplan/src/main/java/types/Type.java b/eplan/src/main/java/types/Type.java new file mode 100644 index 0000000..0abb24f --- /dev/null +++ b/eplan/src/main/java/types/Type.java @@ -0,0 +1,33 @@ +package types; + +import javaslang.collection.List; +import javaslang.collection.Tree; +import javaslang.collection.Tree.Node; +import javaslang.render.ToTree; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +public abstract class Type implements ToTree { + + @Override + public Node toTree() { + return Tree.of(toString()); + } + + @Override + public String toString() { + return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE); + } + + // Verify if this type can be coerced to the given type. In + // general one type can be coerced to another type if and only if the + // types are the same. + public boolean is(Type type) { + return type == this; + } + + // Verify if this type can be coerced to any of the given types. + public boolean is(Type... types) { + return List.of(types).exists(t -> this.is(t)); + } +} diff --git a/eplan/src/main/java/types/UNIT.java b/eplan/src/main/java/types/UNIT.java new file mode 100644 index 0000000..8201ed9 --- /dev/null +++ b/eplan/src/main/java/types/UNIT.java @@ -0,0 +1,15 @@ +package types; + +public class UNIT extends Type { + + public static final UNIT T = new UNIT(); + + private UNIT() { + } + + @Override + public String toString() { + return "unit"; + } + +} diff --git a/eplan/src/main/jflex/lexer.jflex b/eplan/src/main/jflex/lexer.jflex new file mode 100644 index 0000000..0e40df5 --- /dev/null +++ b/eplan/src/main/jflex/lexer.jflex @@ -0,0 +1,99 @@ +package parse; + +import static error.ErrorHelper.error; + +import java_cup.runtime.Symbol; +import java_cup.runtime.SymbolFactory; +import java_cup.runtime.ComplexSymbolFactory.Location; +import java_cup.runtime.ComplexSymbolFactory; + +%% + +%public +%final +%class Lexer +%implements SymbolConstants +%cupsym SymbolConstants +%cup +%line +%column + +%eofval{ + return tok(EOF); +%eofval} + +%ctorarg String unitName + +%init{ + this.unit = unitName; +%init} + +%{ + private String unit; + + private ComplexSymbolFactory complexSymbolFactory = new ComplexSymbolFactory(); + + public SymbolFactory getSymbolFactory() { + return complexSymbolFactory; + } + + // auxiliary methods to construct terminal symbols at current location + + private Location locLeft() { + return new Location(unit, yyline + 1, yycolumn + 1); + } + + private Location locRight() { + return new Location(unit, yyline + 1, yycolumn + 1 + yylength()); + } + + private Symbol tok(int type, String lexeme, Object value) { + return complexSymbolFactory.newSymbol(lexeme, type, locLeft(), locRight(), value); + } + + private Symbol tok(int type, Object value) { + return tok(type, yytext(), value); + } + + private Symbol tok(int type) { + return tok(type, null); + } +%} + +litint = [0-9]+ +litfloat1 = [0-9]+ "." [0-9]* +litfloat2 = [0-9]* "." [0-9]+ +litfloat3 = ({litint} | {litfloat1} | {litfloat2}) [eE] [+-]? {litint} +litreal = {litint} | {litfloat1} | {litfloat2} | {litfloat3} +litbool = true | false + +id = [a-zA-Z][a-zA-Z0-9_]* + +%% + +[ \t\f\n\r]+ { /* skip */ } + +{litint} { return tok(LITINT, yytext()); } +{litreal} { return tok(LITREAL, yytext()); } +{litbool} { return tok(LITBOOL, yytext()); } + +var { return tok(VAR); } +let { return tok(LET); } +in { return tok(IN); } + +{id} { return tok(ID, yytext().intern()); } + +"+" { return tok(PLUS); } +"-" { return tok(MINUS); } +"*" { return tok(TIMES); } +"/" { return tok(DIV); } +"&&" { return tok(AND); } +"||" { return tok(OR); } +"(" { return tok(LPAREN); } +")" { return tok(RPAREN); } +"," { return tok(COMMA); } +";" { return tok(SEMICOLON); } +":" { return tok(COLON); } +"=" { return tok(EQ); } + +. { throw error(Loc.loc(locLeft()), "unexpected char '%s'", yytext()); } diff --git a/eplan/src/test/java/Test/SemantTest.java b/eplan/src/test/java/Test/SemantTest.java new file mode 100644 index 0000000..dd734fe --- /dev/null +++ b/eplan/src/test/java/Test/SemantTest.java @@ -0,0 +1,92 @@ +package Test; + +import absyn.Exp; +import env.Env; +import error.CompilerError; +import java_cup.runtime.Symbol; +import org.assertj.core.api.JUnitSoftAssertions; +import org.junit.Rule; +import org.junit.Test; +import parse.Lexer; +import parse.Parser; +import types.*; + +import java.io.IOException; +import java.io.StringReader; + +public class SemantTest { + + private Type runSemantic(String input) throws Exception { + Lexer lexer = new Lexer(new StringReader(input), "unknown"); + Parser parser = new Parser(lexer); + Symbol program = parser.parse(); + Exp parseTree = (Exp) program.value; + return parseTree.semantic(new Env()); + } + + private void trun(String input, Type type) { + try { + softly.assertThat(runSemantic(input)) + .as("%s", input) + .isEqualTo(type); + } + catch (Exception e) { + e.printStackTrace(); + } + } + + private void erun(String input, String message) throws IOException { + softly.assertThatThrownBy(() -> runSemantic(input)) + .as("%s", input) + .isInstanceOf(CompilerError.class) + .hasToString(message); + } + + @Rule + public final JUnitSoftAssertions softly = new JUnitSoftAssertions(); + + @Test + public void testLiterals() throws Exception { + trun("true", BOOL.T); + trun("123", INT.T); + trun("12.34", REAL.T); + } + + @Test + public void testFunctionCall() throws Exception { + erun("fat(9)", + "error.CompilerError: 1/1-1/7 undefined function 'fat'"); + erun("fat(g(), h())", + "error.CompilerError: 1/5-1/8 undefined function 'g'"); + trun("print_int(123)", + UNIT.T); + erun("print_int(true)", + "error.CompilerError: 1/11-1/15 type mismatch: found bool but expected int"); + erun("print_int(123, true, f())", + "error.CompilerError: 1/22-1/25 undefined function 'f'"); + erun("print_int()", + "error.CompilerError: 1/1-1/12 too few arguments in call to 'print_int'"); + } + + @Test + public void testSequence() throws Exception { + trun("()", UNIT.T); + trun("(true)", BOOL.T); + trun("(print_int(23); 2.3)", REAL.T); + } + + @Test + public void testSimpleVariableAndLet() throws Exception { + erun("x", + "error.CompilerError: 1/1-1/2 undefined variable 'x'"); + trun("let var x: int = 10 in x", + INT.T); + trun("let var x = 0.56 in x", + REAL.T); + erun("let var x: int = 3.4 in x", + "error.CompilerError: 1/18-1/21 type mismatch: found real but expected int"); + erun("(let var x = 5 in print_int(x); x)", + "error.CompilerError: 1/33-1/34 undefined variable 'x'"); + } + +} diff --git a/eplan/tests/test-lexer-01.eplan b/eplan/tests/test-lexer-01.eplan new file mode 100644 index 0000000..03e1a60 --- /dev/null +++ b/eplan/tests/test-lexer-01.eplan @@ -0,0 +1,3 @@ +12 * + (453.2 - 140.300) / + 2