diff --git a/src/main/antlr/grammar/crml.g4 b/src/main/antlr/grammar/crml.g4 index 497f3213..ccee9505 100644 --- a/src/main/antlr/grammar/crml.g4 +++ b/src/main/antlr/grammar/crml.g4 @@ -93,7 +93,7 @@ if_exp : 'if' if_e=exp 'then' then_e=exp ('else' else_e=exp); constructor : 'new' type exp; -period_op : ('['| ']') exp ',' exp ('['| ']') ; +period_op : lb=('['| ']') exp ',' exp rb=('['| ']') ; op : builtin_op|user_keyword ; diff --git a/src/main/java/crml/compiler/crmlVisitorImpl.java b/src/main/java/crml/compiler/crmlVisitorImpl.java index 101efcc0..db1e98d4 100644 --- a/src/main/java/crml/compiler/crmlVisitorImpl.java +++ b/src/main/java/crml/compiler/crmlVisitorImpl.java @@ -490,7 +490,9 @@ else if (ctx.uninstantiated_def()!=null) if(ctx.sub_exp()!=null) return visit(ctx.sub_exp().exp()); - + if(ctx.period_op()!=null){ + return visit(ctx.period_op()); + } // expression is a tick if(ctx.tick() != null) { @@ -530,10 +532,32 @@ private UserOperatorCall reconstructUserOperator(ExpContext ctx, String string, } @Override - public Value visitSet_def(crmlParser.Set_defContext cxt) { + public Value visitSet_def(crmlParser.Set_defContext ctx) { return new Value ("Set", "{}", true); } + @Override + public Value visitPeriod_op(crmlParser.Period_opContext ctx) { + + //String periodType = types_mapping.get("Period"); + + //TODO add typechecking + + Value left = visit(ctx.exp(0)); + Value right = visit(ctx.exp(0)); + + Boolean lborder = (ctx.lb.getText().equals("[")); + Boolean rborder = (ctx.rb.getText().equals("]")); + + String code = + "CRMLtoModelica.Types.CRMLPeriod(left=" + left.contents + + ", right=" + right.contents + + ",lb=" +lborder.toString() + + ",rb=" +rborder.toString()+");"; + + return new Value (code, "Period", false); + } + @Override public Value visitId(crmlParser.IdContext ctx){ VariableData.VariableType v_type = variableTable.getVariableInfo(ctx.getText());