Quellcode durchsuchen

Added Expression code generator for Cpp

jos.itemis@gmail.com vor 14 Jahren
Ursprung
Commit
6dc60374f8

+ 4 - 4
plugins/org.yakindu.sct.generator.cpp/.settings/org.eclipse.core.resources.prefs

@@ -1,4 +1,4 @@
-#Thu Sep 08 14:46:18 CEST 2011
-eclipse.preferences.version=1
-encoding//.settings/org.eclipse.xtend.shared.ui.prefs=Cp1252
-encoding/<project>=Cp1252
+#Fri Sep 09 10:16:39 CEST 2011
+eclipse.preferences.version=1
+encoding//.settings/org.eclipse.xtend.shared.ui.prefs=Cp1252
+encoding/<project>=Cp1252

+ 2 - 1
plugins/org.yakindu.sct.generator.cpp/META-INF/MANIFEST.MF

@@ -16,6 +16,7 @@ Require-Bundle: org.yakindu.sct.model.sexec;bundle-version="1.0.0",
  org.eclipse.jface.text;bundle-version="3.5.0",
  org.eclipse.xpand;bundle-version="0.7.0",
  org.eclipse.xtend;bundle-version="0.7.0",
- org.eclipse.xtend.typesystem.emf;bundle-version="0.7.0"
+ org.eclipse.xtend.typesystem.emf;bundle-version="0.7.0",
+ org.yakindu.sct.model.stext;bundle-version="1.0.0"
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
 Export-Package: org.yakindu.sct.generator.cpp.templates

+ 72 - 0
plugins/org.yakindu.sct.generator.cpp/src/org/yakindu/sct/generator/cpp/templates/Expression.ext

@@ -0,0 +1,72 @@
+import stext;
+
+
+String toCppCode(Expression statement, String statechartReference) : 
+	null; //polymorphic placeholder (abstract rule)
+
+String toCppCode(PrimitiveValueExpression primValue, String statechartName) :
+	primValue.value;
+
+/* Assignment */
+String toCppCode(Assignment assignment, String statechartName) :
+  switch (assignment.operator) {
+  case (AssignmentOperator::assign) : statechartName + "." + assignment.varRef.name + " = ( " + assignment.expression.toCppCode(statechartName) + " );"  
+  case (AssignmentOperator::multAssign) : statechartName + "." + assignment.varRef.name + " *= " + "(" + assignment.expression.toCppCode(statechartName) + ");"
+  case (AssignmentOperator::divAssign) : statechartName + "." + assignment.varRef.name + " /= " + "(" + assignment.expression.toCppCode(statechartName) + ");"
+  case (AssignmentOperator::modAssign) : statechartName + "." + assignment.varRef.name + " %= " + "(" + assignment.expression.toCppCode(statechartName) + ");"
+  case (AssignmentOperator::addAssign) : statechartName + "." + assignment.varRef.name + " += " + "(" + assignment.expression.toCppCode(statechartName) + ");"
+  case (AssignmentOperator::subAssign) : statechartName + "." + assignment.varRef.name + " -= " + "(" + assignment.expression.toCppCode(statechartName) + ");"
+  case (AssignmentOperator::leftShiftAssign) : statechartName + "." + assignment.varRef.name + " <<= " + "(" + assignment.expression.toCppCode(statechartName) + ");"
+  case (AssignmentOperator::rightShiftAssign) : statechartName + "." + assignment.varRef.name + " >>= " + "(" + assignment.expression.toCppCode(statechartName) + ");"
+  case (AssignmentOperator::andAssign) : statechartName + "." + assignment.varRef.name + " &= " + "(" + assignment.expression.toCppCode(statechartName) + ");"
+  case (AssignmentOperator::xorAssign) : statechartName + "." + assignment.varRef.name + " ^= " + "(" + assignment.expression.toCppCode(statechartName) + ");"
+  case (AssignmentOperator::orAssign) : statechartName + "." + assignment.varRef.name + " |= " + "(" + assignment.expression.toCppCode(statechartName) + ");"
+  default : ""
+  };
+
+/* EventRaising */
+
+/* Logical Expressions */
+String toCppCode(LogicalOrExpression expression, String statechartReference) :
+  	statechartReference + "." + expression.leftOperand.toCppCode(statechartReference) + " || " + statechartReference + "." + expression.rightOperand.toCppCode(statechartReference);
+  	
+String toCppCode(LogicalAndExpression expression, String statechartReference) :
+  	statechartReference + "." + expression.leftOperand.toCppCode(statechartReference) + " && " + statechartReference + "." + expression.rightOperand.toCppCode(statechartReference);
+
+String toCppCode(LogicalNotExpression expression, String statechartReference) :
+  	" ^" + statechartReference + "." + expression.operand.toCppCode(statechartReference);
+
+String toCppCode(LogicalRelationExpression expression, String statechartReference) :
+    statechartReference + "." + expression.leftOperand.toCppCode(statechartReference) + " ??? " + statechartReference + "." + expression.leftOperand.toCppCode(statechartReference);
+    
+String toCppCode(BitwiseAndExpression expression, String statechartReference) :
+  	statechartReference + "." + expression.leftOperand.toCppCode(statechartReference) + " & " + statechartReference + "." + expression.rightOperand.toCppCode(statechartReference);
+
+String toCppCode(BitwiseOrExpression expression, String statechartReference) :
+  	statechartReference + "." + expression.leftOperand.toCppCode(statechartReference) + " | " + statechartReference + "." + expression.rightOperand.toCppCode(statechartReference);
+
+String toCppCode(BitwiseXorExpression expression, String statechartReference) :
+  	statechartReference + "." + expression.leftOperand.toCppCode(statechartReference) + " ^ " + statechartReference + "." + expression.rightOperand.toCppCode(statechartReference);
+
+String getOperator(AdditiveOperator operator) : 
+    switch(operator) {
+    	case(AdditiveOperator::plus) : " + "
+    	case(AdditiveOperator::minus) : " - "
+    	default : ""
+    };
+
+String toCppCode(NumericalAddSubtractExpression expression, String statechartReference) :
+  	statechartReference + "." + expression.leftOperand.toCppCode(statechartReference) + getOperator(expression.operator) + statechartReference + "." + expression.rightOperand.toCppCode(statechartReference);
+
+String getOperator(MultiplicativeOperator operator) : 
+    switch(operator) {
+    	case(MultiplicativeOperator::mul) : " + "
+    	case(MultiplicativeOperator::div) : " / "
+    	case(MultiplicativeOperator::mod) : " % "
+    	default : ""
+    };
+
+String toCppCode(NumericalMultiplyDivideExpression expression, String statechartReference) :
+  	statechartReference + "." + expression.leftOperand.toCppCode(statechartReference) + getOperator(expression.operator) + statechartReference + "." + expression.rightOperand.toCppCode(statechartReference);
+
+