Más Language Workbench Competition 2011 con AjGenesis

Published on Author lopezLeave a comment

En mi anterior post describí mi trabajo inicial para Language Workbench Competition 2011, usando AjGenesis. Ahora, es hora de escribir sobre algunas tareas más que he escrito. Pueden leer la lista de tareas a cumplir en:

http://www.languageworkbenches.net/LWCTask-1.0.pdf

Primero, saltée la 0.3 (constraint checks such as name-uniqueness). Planeo completarla, pero no ahora. Escribí la tarea 0.4:

0.4 Show how to break down a (large) model into several parts, while still cross-referencing between the parts. For example, put the Car and Person entities into different files, while still having the Person -> Car reference work.

El código quedó en el repositorio de AjGenesis:

http://ajgenesis.codeplex.com/SourceControl/list/changesets

en el directorio examples/Lcw2011

Este paso fue fácil. El Project.txt es ahora:

Project Lwc2011
	Entities
		Entity Person Source="Entities\Person.txt"	
		Entity Car Source="Entities\Car.txt"
	End Entities
End Project

 

El atributo Source es especial en AjGenesis durante la carga del modelo: indica que el objeto se completa desde un archivo separado a leer. Agregué esta característica desde el principio de AjGenesis: quiero tener archivos de modelos que sean manejables, y que no “duelan los ojos” al leerlos 😉

Esta es ahora Person.txt:

Entity Person
	Properties
		Property Name Type="Text"
		Property FirstName Type="Text"
		Property BirthDate Type="Date"
		Property OwnedCar Type="Car"
	End Properties
End Entity

Comencé también a escribir la Fase 1, primer tarea:

1.1 Show the integration of several languages. Define a second language to define instances of the entities, including assignment of values to the properties. This should ideally really be a second language that integrates with the first one, not just "more syntax" in the same

grammar. We want to showcase language modularity and composition here.

Este es el nuevo modelo:

Project Lwc2011
	Description = "Lwc"
	Entities
		Entity Person Source="Entities\Person.txt"	
		Entity Car Source="Entities\Car.txt"
	End Entities
	
	Instances
		Instance p 
			Type = "Person"
			Properties
				Property Name Value = "Voelter"
				Property FirstName Value = "Markus"
				Property BirthDay Value = "14/02/1927"
				Property OwnedCar Value = "c"
			End Properties
		End Instance
		
		Instance c 
			Type = "Car"
			Properties
				Property Make Value = "VW"
				Property Model Value = "Touran"
			End Properties
		End Instance
	End Instances
End Project

Es trabajo en progreso. Podría poner las instancias en un archivo independiente (Instances.txt) o podría poner cada instancia en un archivo separado, referenciado por el código de arriba usando el atribute Source. Debería completar la tarea con control de la existencia de cada propiedad, que exista en la entidad correspondiente. AjGenesis no soporta la definición de un Domain-Specific Language: el ejemplo de arriba es todavía un modelo libre. Podemos agregar una propiedad cualquiera a cualquier instancia, y la actual implementación no controla el uso apropiado del modelo de entidades. Este tipo de control es tarea pendiente: lo agregaré en la logica de las tasks que escribo, pero en general, no lo uso en los proyectos reales.

Hasta donde sé, esta tarea 1.1 no implica generación de código. En la próxima tarea, controlaré que los valores de las propiedades correspondan a los tipos declarados en los tipos.

Nos leemos!

Angel “Java” Lopez

http://www.ajlopez.com

http://twitter.com/ajlopez

Leave a Reply

Your email address will not be published. Required fields are marked *