Nantes Université

Skip to content
Extraits de code Groupes Projets
Valider 52accc17 rédigé par Erwan Bousse's avatar Erwan Bousse
Parcourir les fichiers

Fix codegen lab

parent d6b1a909
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
package fr.univnantes.idm.robotdsl.codegen.examples package fr.univnantes.idm.robotdsl.codegen.examples
import com.google.inject.Inject import com.google.inject.Inject
import fr.univnantes.idm.robotdsl.abstractsyntax.robotdsl.RobotSimulation
import fr.univnantes.idm.robotdsl.codegen.RobotDSLCodeGenerator
import fr.univnantes.idm.tests.RobotDSLInjectorProvider import fr.univnantes.idm.tests.RobotDSLInjectorProvider
import org.eclipse.xtext.testing.InjectWith import org.eclipse.xtext.testing.InjectWith
import org.eclipse.xtext.testing.extensions.InjectionExtension import org.eclipse.xtext.testing.extensions.InjectionExtension
...@@ -8,8 +10,6 @@ import org.eclipse.xtext.testing.util.ParseHelper ...@@ -8,8 +10,6 @@ import org.eclipse.xtext.testing.util.ParseHelper
import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.Assertions
import org.junit.jupiter.api.Test import org.junit.jupiter.api.Test
import org.junit.jupiter.api.^extension.ExtendWith import org.junit.jupiter.api.^extension.ExtendWith
import robotdsl.RobotSimulation
import fr.univnantes.idm.robotdsl.codegen.RobotDSLCodeGenerator
@ExtendWith(InjectionExtension) @ExtendWith(InjectionExtension)
@InjectWith(RobotDSLInjectorProvider) @InjectWith(RobotDSLInjectorProvider)
......
...@@ -5,10 +5,10 @@ Bundle-SymbolicName: fr.univnantes.idm.robotdsl.codegen ...@@ -5,10 +5,10 @@ Bundle-SymbolicName: fr.univnantes.idm.robotdsl.codegen
Bundle-Version: 1.0.0.qualifier Bundle-Version: 1.0.0.qualifier
Automatic-Module-Name: fr.univnantes.idm.robotdsl.codegen Automatic-Module-Name: fr.univnantes.idm.robotdsl.codegen
Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Require-Bundle: fr.univnantes.idm.robotdsl.abstractsyntax;bundle-version="0.1.0", Require-Bundle: com.google.guava,
com.google.guava,
org.eclipse.xtext.xbase.lib, org.eclipse.xtext.xbase.lib,
org.eclipse.xtend.lib, org.eclipse.xtend.lib,
org.eclipse.xtend.lib.macro org.eclipse.xtend.lib.macro,
fr.univnantes.idm.robotdsl.abstractsyntax;bundle-version="0.1.0"
Export-Package: fr.univnantes.idm.robotdsl.codegen Export-Package: fr.univnantes.idm.robotdsl.codegen
package fr.univnantes.idm.robotdsl.codegen package fr.univnantes.idm.robotdsl.codegen
import robotdsl.Light import fr.univnantes.idm.robotdsl.abstractsyntax.robotdsl.RobotSimulation
import robotdsl.Motor
import robotdsl.MoveForward
import robotdsl.Robot
import robotdsl.RobotProgram
import robotdsl.RobotSimulation
import robotdsl.Rotate
import robotdsl.SetLightColor
class RobotDSLCodeGenerator { class RobotDSLCodeGenerator {
private static def String toClassName(String s) {
return s.toFirstUpper.replaceAll(' ', "")
}
static def String generateCode(RobotSimulation simulation) { static def String generateCode(RobotSimulation simulation) {
return ''' return ''''''
import fr.univnantes.idm.robotdsl.lib.*;
import static fr.univnantes.idm.robotdsl.lib.Color.*;
public class «simulation.name.toClassName» {
«FOR robot : simulation.robots»
«generate(robot)»
«ENDFOR»
«FOR program : simulation.programs»
«generate(program)»
«ENDFOR»
}
'''
}
private def static dispatch String generate(Robot robot) {
return '''
class «robot.name.toClassName» {
«FOR component : robot.components»
«generate(component)»
«ENDFOR»
}
'''
}
private def static dispatch String generate(RobotProgram robotProgram) {
return '''
public static void «robotProgram.name»(«robotProgram.robot.name.toClassName» robot) {
«FOR command : robotProgram.commands»
«generate(command)»
«ENDFOR»
}
'''
}
private def static dispatch String generate(SetLightColor setLightColor) {
return '''robot.«setLightColor.light.name».setLightColor(«setLightColor.color»);'''
}
private def static dispatch String generate(MoveForward moveForward) {
return '''
«FOR motor : (moveForward.eContainer as RobotProgram).robot.components.filter(Motor)»
robot.«motor.name».moveForward(«moveForward.distance»);
«ENDFOR»
'''
}
private def static dispatch String generate(Rotate rotate) {
return '''// rotate not handled'''
}
private def static dispatch String generate(Light light) {
return '''public Light «light.name» = new Light();'''
}
private def static dispatch String generate(Motor motor) {
return '''public Motor «motor.name» = new Motor(«motor.power»);'''
} }
} }
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter