p5 - desarrollo de editores textuales con xtext · 2013-11-21 · producen un árbol de tokens...
TRANSCRIPT
![Page 1: P5 - Desarrollo de editores textuales con Xtext · 2013-11-21 · producen un árbol de tokens terminales y no terminales. Estas reglas pueden devolver un tipo EDataType. 21/11/13](https://reader034.vdocumento.com/reader034/viewer/2022042118/5e97722e2e141363d509ba9d/html5/thumbnails/1.jpg)
Iván Ruiz Rube Departamento de Ingeniería Informática Escuela Superior de Ingeniería Universidad de Cádiz
21/11/13 1
Desarrollo de editores textuales con Xtext
Procesadores de Lenguajes 2
PL2 - Desarrollo de editores textuales con Xtext
Curso 2013-2014
![Page 2: P5 - Desarrollo de editores textuales con Xtext · 2013-11-21 · producen un árbol de tokens terminales y no terminales. Estas reglas pueden devolver un tipo EDataType. 21/11/13](https://reader034.vdocumento.com/reader034/viewer/2022042118/5e97722e2e141363d509ba9d/html5/thumbnails/2.jpg)
En la clase anterior…
� El framework GMF permite construir editores de modelos visuales, con capacidades avanzadas.
� Proceso de construcción basado en la transformación sucesiva de modelos.
� Mapping entre elementos del metamodelo, metáforas visuales y herramientas de creación.
21/11/13 PL2 - Desarrollo de editores textuales con Xtext 2
![Page 3: P5 - Desarrollo de editores textuales con Xtext · 2013-11-21 · producen un árbol de tokens terminales y no terminales. Estas reglas pueden devolver un tipo EDataType. 21/11/13](https://reader034.vdocumento.com/reader034/viewer/2022042118/5e97722e2e141363d509ba9d/html5/thumbnails/3.jpg)
Contenidos
� Instalación � Introducción � Características � EMF y Xtext � Diseño de gramáticas � Desarrollo de un editor textual
21/11/13 3 PL2 - Desarrollo de editores textuales con Xtext
![Page 4: P5 - Desarrollo de editores textuales con Xtext · 2013-11-21 · producen un árbol de tokens terminales y no terminales. Estas reglas pueden devolver un tipo EDataType. 21/11/13](https://reader034.vdocumento.com/reader034/viewer/2022042118/5e97722e2e141363d509ba9d/html5/thumbnails/4.jpg)
INSTALACIÓN DESARROLLO DE EDITORES TEXTUALES CON XTEXT
21/11/13 4 PL2 - Desarrollo de editores textuales con Xtext
![Page 5: P5 - Desarrollo de editores textuales con Xtext · 2013-11-21 · producen un árbol de tokens terminales y no terminales. Estas reglas pueden devolver un tipo EDataType. 21/11/13](https://reader034.vdocumento.com/reader034/viewer/2022042118/5e97722e2e141363d509ba9d/html5/thumbnails/5.jpg)
Instalación Xtext
21/11/13 PL2 - Desarrollo de editores textuales con Xtext 5
Help → Install Modeling Components
![Page 6: P5 - Desarrollo de editores textuales con Xtext · 2013-11-21 · producen un árbol de tokens terminales y no terminales. Estas reglas pueden devolver un tipo EDataType. 21/11/13](https://reader034.vdocumento.com/reader034/viewer/2022042118/5e97722e2e141363d509ba9d/html5/thumbnails/6.jpg)
INTRODUCCIÓN DESARROLLO DE EDITORES TEXTUALES CON XTEXT
21/11/13 6 PL2 - Desarrollo de editores textuales con Xtext
![Page 7: P5 - Desarrollo de editores textuales con Xtext · 2013-11-21 · producen un árbol de tokens terminales y no terminales. Estas reglas pueden devolver un tipo EDataType. 21/11/13](https://reader034.vdocumento.com/reader034/viewer/2022042118/5e97722e2e141363d509ba9d/html5/thumbnails/7.jpg)
Xtext � Proyecto open source para el desarrollo
de lenguajes textuales, liderados por la empresa Itemis AG.
� Xtext genera automáticamente los componentes necesarios para trabajar con los DSL: parser, analizador estático, formateador de código, generador de código, etc.
� Pueden utilizarse desde dentro de Eclipse o de forma independiente.
21/11/13 PL2 - Desarrollo de editores textuales con Xtext 7
![Page 8: P5 - Desarrollo de editores textuales con Xtext · 2013-11-21 · producen un árbol de tokens terminales y no terminales. Estas reglas pueden devolver un tipo EDataType. 21/11/13](https://reader034.vdocumento.com/reader034/viewer/2022042118/5e97722e2e141363d509ba9d/html5/thumbnails/8.jpg)
Xtext � Xtext incluye un lenguaje para diseñar
gramáticas y una amplia API para definir los diferentes aspectos de los DSL.
� Utiliza Google Guice, un framework ligero para la inyección de dependencias, con el cual podemos sustituir fácilmente cualquier comportamiento por defecto.
� Se basa en ANTLR para generar analizadores sintácticos descendentes LL(k).
21/11/13 PL2 - Desarrollo de editores textuales con Xtext 8
![Page 9: P5 - Desarrollo de editores textuales con Xtext · 2013-11-21 · producen un árbol de tokens terminales y no terminales. Estas reglas pueden devolver un tipo EDataType. 21/11/13](https://reader034.vdocumento.com/reader034/viewer/2022042118/5e97722e2e141363d509ba9d/html5/thumbnails/9.jpg)
Generación de componentes � Xtext construye automáticamente la
infraestructura software necesaria para dar soporte a los nuevos lenguajes.
� Para configurar la generación automática del código de soporte, Xtext utiliza un DSL especial, denominado MWE2.
� MWE2 es un lenguaje declarativo para definir workflows formados por diferentes componentes que se encargarán de leer recursos EMF, transformarlos y generar artefactos de código.
21/11/13 PL2 - Desarrollo de editores textuales con Xtext 9
![Page 10: P5 - Desarrollo de editores textuales con Xtext · 2013-11-21 · producen un árbol de tokens terminales y no terminales. Estas reglas pueden devolver un tipo EDataType. 21/11/13](https://reader034.vdocumento.com/reader034/viewer/2022042118/5e97722e2e141363d509ba9d/html5/thumbnails/10.jpg)
Proceso generativo de desarrollo
21/11/13 PL2 - Desarrollo de editores textuales con Xtext 10
![Page 11: P5 - Desarrollo de editores textuales con Xtext · 2013-11-21 · producen un árbol de tokens terminales y no terminales. Estas reglas pueden devolver un tipo EDataType. 21/11/13](https://reader034.vdocumento.com/reader034/viewer/2022042118/5e97722e2e141363d509ba9d/html5/thumbnails/11.jpg)
CARACTERÍSTICAS DESARROLLO DE EDITORES TEXTUALES CON XTEXT
21/11/13 11 PL2 - Desarrollo de editores textuales con Xtext
![Page 12: P5 - Desarrollo de editores textuales con Xtext · 2013-11-21 · producen un árbol de tokens terminales y no terminales. Estas reglas pueden devolver un tipo EDataType. 21/11/13](https://reader034.vdocumento.com/reader034/viewer/2022042118/5e97722e2e141363d509ba9d/html5/thumbnails/12.jpg)
Características de los DSL (I)
� Validation: para asegurar la corrección de los programas.
� Linking: declaración de enlaces dentro de la gramática.
� Scoping: definir el ámbito de aplicabilidad de elementos de la gramática.
� Quick Fixes: proporcionar soluciones rápidas para corregir un error o warning.
21/11/13 PL2 - Desarrollo de editores textuales con Xtext 12
![Page 13: P5 - Desarrollo de editores textuales con Xtext · 2013-11-21 · producen un árbol de tokens terminales y no terminales. Estas reglas pueden devolver un tipo EDataType. 21/11/13](https://reader034.vdocumento.com/reader034/viewer/2022042118/5e97722e2e141363d509ba9d/html5/thumbnails/13.jpg)
Características de los DSL (II)
� Formatting: manipular tokens (espacios en blanco, saltos de línea, comentarios, etc.)
� Syntax Coloring: utilización de diferentes colores o fuentes en diferentes elementos del fichero.
� Templates: incluir extractos de código de forma automática en el editor.
� Content Assist: auto-completado de código.
21/11/13 PL2 - Desarrollo de editores textuales con Xtext 13
![Page 14: P5 - Desarrollo de editores textuales con Xtext · 2013-11-21 · producen un árbol de tokens terminales y no terminales. Estas reglas pueden devolver un tipo EDataType. 21/11/13](https://reader034.vdocumento.com/reader034/viewer/2022042118/5e97722e2e141363d509ba9d/html5/thumbnails/14.jpg)
Características de los DSL (III) � Outline View: vista jerárquica para navegar
sobre nuestros modelos. � Hyperlinking: mecanismo para navegar
entre tokens del elementos del modelo (ctrl+click).
� Label Providers: personalizar la forma en el que los elementos del modelo son presentados en la interfaz gráfica.
� Name Refactoring: Renombrado seguro de elementos.
21/11/13 PL2 - Desarrollo de editores textuales con Xtext 14
![Page 15: P5 - Desarrollo de editores textuales con Xtext · 2013-11-21 · producen un árbol de tokens terminales y no terminales. Estas reglas pueden devolver un tipo EDataType. 21/11/13](https://reader034.vdocumento.com/reader034/viewer/2022042118/5e97722e2e141363d509ba9d/html5/thumbnails/15.jpg)
EMF y XTEXT DESARROLLO DE EDITORES TEXTUALES CON XTEXT
21/11/13 15 PL2 - Desarrollo de editores textuales con Xtext
![Page 16: P5 - Desarrollo de editores textuales con Xtext · 2013-11-21 · producen un árbol de tokens terminales y no terminales. Estas reglas pueden devolver un tipo EDataType. 21/11/13](https://reader034.vdocumento.com/reader034/viewer/2022042118/5e97722e2e141363d509ba9d/html5/thumbnails/16.jpg)
EMF y Xtext
Meta-metamodel (Ecore)
Metamodel
Model
Meta-sintaxis (EBNF)
Grammar
Program
21/11/13 PL2 - Desarrollo de editores textuales con Xtext 16
Modelware Grammarware
M3
M2
M1
![Page 17: P5 - Desarrollo de editores textuales con Xtext · 2013-11-21 · producen un árbol de tokens terminales y no terminales. Estas reglas pueden devolver un tipo EDataType. 21/11/13](https://reader034.vdocumento.com/reader034/viewer/2022042118/5e97722e2e141363d509ba9d/html5/thumbnails/17.jpg)
EMF y Xtext (II) � Los parsers generados con Xtext analizan
los ficheros de código fuente, generando una representación en memoria de los mismos.
� Los árboles de sintaxis abstracta (AST) son utilizados para representar la estructura sintáctica del fichero de texto.
� Los AST son modelos conformes al metamodelo de nuestro DSL. Así pues, el parser generado por Xtext se encarga de transformar el “texto” en un modelo (T2M).
21/11/13 PL2 - Desarrollo de editores textuales con Xtext 17
![Page 18: P5 - Desarrollo de editores textuales con Xtext · 2013-11-21 · producen un árbol de tokens terminales y no terminales. Estas reglas pueden devolver un tipo EDataType. 21/11/13](https://reader034.vdocumento.com/reader034/viewer/2022042118/5e97722e2e141363d509ba9d/html5/thumbnails/18.jpg)
EMF y Xtext (III) � Los modelos desarrollados con los editores
EMF o GMF son serializados en un formato XML.
� Los modelos desarrollados con los editores Xtext son serializados en un fichero de texto según una determinada gramática.
� La integración de EMF y Xtext permite que un mismo modelo pueda ser editado síncronamente con editores reflexivos (basados en árbol), visuales o textuales.
21/11/13 PL2 - Desarrollo de editores textuales con Xtext 18
![Page 19: P5 - Desarrollo de editores textuales con Xtext · 2013-11-21 · producen un árbol de tokens terminales y no terminales. Estas reglas pueden devolver un tipo EDataType. 21/11/13](https://reader034.vdocumento.com/reader034/viewer/2022042118/5e97722e2e141363d509ba9d/html5/thumbnails/19.jpg)
Sintaxis específica
EMF y Xtext (IV)
21/11/13 PL2 - Desarrollo de editores textuales con Xtext 19
Sintaxis XML
![Page 20: P5 - Desarrollo de editores textuales con Xtext · 2013-11-21 · producen un árbol de tokens terminales y no terminales. Estas reglas pueden devolver un tipo EDataType. 21/11/13](https://reader034.vdocumento.com/reader034/viewer/2022042118/5e97722e2e141363d509ba9d/html5/thumbnails/20.jpg)
DISEÑO DE GRAMÁTICAS
DESARROLLO DE EDITORES TEXTUALES CON XTEXT
21/11/13 20 PL2 - Desarrollo de editores textuales con Xtext
![Page 21: P5 - Desarrollo de editores textuales con Xtext · 2013-11-21 · producen un árbol de tokens terminales y no terminales. Estas reglas pueden devolver un tipo EDataType. 21/11/13](https://reader034.vdocumento.com/reader034/viewer/2022042118/5e97722e2e141363d509ba9d/html5/thumbnails/21.jpg)
Gramáticas en Xtext
� Xtext ofrece un lenguaje específico para diseñar gramáticas tipo EBNF.
� Las gramáticas se componen de un conjunto de reglas terminales y no terminales.
� Adicionalmente, se pueden definir predicados sintácticos, símbolos terminales ocultos y reglas para valores enumerados.
21/11/13 PL2 - Desarrollo de editores textuales con Xtext 21
![Page 22: P5 - Desarrollo de editores textuales con Xtext · 2013-11-21 · producen un árbol de tokens terminales y no terminales. Estas reglas pueden devolver un tipo EDataType. 21/11/13](https://reader034.vdocumento.com/reader034/viewer/2022042118/5e97722e2e141363d509ba9d/html5/thumbnails/22.jpg)
Declaración de la gramática � Se define el nombre de la gramática y
aquellas que queremos reutilizar. Indicaremos el metamodelo de nuestros AST que vayamos a utilizar o bien podemos generar (inferir) uno nuevo.
21/11/13 PL2 - Desarrollo de editores textuales con Xtext 22
grammar grammar.qualified.file.name
with other.grammar.qualified.file.name
import “input_metamodel_uri” as metamodel_name
generate metamodel_name ‘metamodel_uri’
![Page 23: P5 - Desarrollo de editores textuales con Xtext · 2013-11-21 · producen un árbol de tokens terminales y no terminales. Estas reglas pueden devolver un tipo EDataType. 21/11/13](https://reader034.vdocumento.com/reader034/viewer/2022042118/5e97722e2e141363d509ba9d/html5/thumbnails/23.jpg)
Expresiones EBNF (I)
� Caracteres: ‘a’
� Rango de caracteres: ‘0’..’9’
� Comodines: ’F’ . ’O’
� Hasta… '/*' -> '*/';
� Negación: !’a’
� Grupos: ('0'..‘9') ('A'..'F')
� Alternativas: rule1 | rule2 | rule3
21/11/13 PL2 - Desarrollo de editores textuales con Xtext 23
![Page 24: P5 - Desarrollo de editores textuales con Xtext · 2013-11-21 · producen un árbol de tokens terminales y no terminales. Estas reglas pueden devolver un tipo EDataType. 21/11/13](https://reader034.vdocumento.com/reader034/viewer/2022042118/5e97722e2e141363d509ba9d/html5/thumbnails/24.jpg)
Expresiones EBNF (II) � Cardinalidad: ◦ Exactamente uno: por defecto ◦ Cero o uno: ‘a’? ◦ Cero o más: ‘a’* ◦ Uno o más: ‘a’+
� Grupos desordenados (‘public’ |’private’ |’protected’) & 'static' & 'final'
� Llamadas a reglas: terminal DOUBLE: INT ‘.’ INT;
� Referencias cruzadas ‘Event:’ name=ID ‘from’ [State] ‘to' [State];
21/11/13 PL2 - Desarrollo de editores textuales con Xtext 24
![Page 25: P5 - Desarrollo de editores textuales con Xtext · 2013-11-21 · producen un árbol de tokens terminales y no terminales. Estas reglas pueden devolver un tipo EDataType. 21/11/13](https://reader034.vdocumento.com/reader034/viewer/2022042118/5e97722e2e141363d509ba9d/html5/thumbnails/25.jpg)
Expresiones EBNF (III) � Operadores de asignación ◦ Simple: permite asignar la información
procesada a una característica simple del modelo.
name = ID ◦ Múltiple: permite añadir una lista de valores a
una característica del modelo de tipo lista. options += OPTION ◦ Booleano: asigna true si hay algún valor y falso
en caso contrario correct ?= ‘correct’
21/11/13 PL2 - Desarrollo de editores textuales con Xtext 25
![Page 26: P5 - Desarrollo de editores textuales con Xtext · 2013-11-21 · producen un árbol de tokens terminales y no terminales. Estas reglas pueden devolver un tipo EDataType. 21/11/13](https://reader034.vdocumento.com/reader034/viewer/2022042118/5e97722e2e141363d509ba9d/html5/thumbnails/26.jpg)
Terminal Rules � Estas reglas transforman secuencias de
caracteres en tokens, cubriendo así el análisis léxico del texto. Pueden devolver un tipo EDataType (por defecto, ecore::EString) La gramática org.eclipse.xtext.common.Terminals incorpora una serie de patrones estándar, como ID.
21/11/13 PL2 - Desarrollo de editores textuales con Xtext 26
terminal ID :
('^')?('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'_'|'0'..'9')*;
![Page 27: P5 - Desarrollo de editores textuales con Xtext · 2013-11-21 · producen un árbol de tokens terminales y no terminales. Estas reglas pueden devolver un tipo EDataType. 21/11/13](https://reader034.vdocumento.com/reader034/viewer/2022042118/5e97722e2e141363d509ba9d/html5/thumbnails/27.jpg)
Parser Rules
� Estas reglas, a diferencia de las anteriores, no produce un token atómico, sino que producen un árbol de tokens terminales y no terminales. Estas reglas pueden devolver un tipo EDataType.
21/11/13 PL2 - Desarrollo de editores textuales con Xtext 27
BookRule returns booksMM::Book :
‘Book’ ‘{‘ ‘title:' title=ID ‘,’
‘author:' author=ID ‘}’ ;
![Page 28: P5 - Desarrollo de editores textuales con Xtext · 2013-11-21 · producen un árbol de tokens terminales y no terminales. Estas reglas pueden devolver un tipo EDataType. 21/11/13](https://reader034.vdocumento.com/reader034/viewer/2022042118/5e97722e2e141363d509ba9d/html5/thumbnails/28.jpg)
DESARROLLO DE UN EDITOR TEXTUAL
DESARROLLO DE EDITORES TEXTUALES CON XTEXT
21/11/13 28 PL2 - Desarrollo de editores textuales con Xtext
![Page 29: P5 - Desarrollo de editores textuales con Xtext · 2013-11-21 · producen un árbol de tokens terminales y no terminales. Estas reglas pueden devolver un tipo EDataType. 21/11/13](https://reader034.vdocumento.com/reader034/viewer/2022042118/5e97722e2e141363d509ba9d/html5/thumbnails/29.jpg)
¿Qué vamos a hacer?
� Suponemos que muy frecuentemente tenemos que desarrollar formularios web para generar cuestionarios de evaluación.
� No queremos hacer uso una interfaz de administración, ni utilizar lenguajes visuales para su diseño.
� Solución: desarrollar un DSL textual para escribir cuestionarios utilizando una gramática sencilla.
21/11/13 PL2 - Desarrollo de editores textuales con Xtext 29
![Page 30: P5 - Desarrollo de editores textuales con Xtext · 2013-11-21 · producen un árbol de tokens terminales y no terminales. Estas reglas pueden devolver un tipo EDataType. 21/11/13](https://reader034.vdocumento.com/reader034/viewer/2022042118/5e97722e2e141363d509ba9d/html5/thumbnails/30.jpg)
Algo asi…
21/11/13 PL2 - Desarrollo de editores textuales con Xtext 30
![Page 31: P5 - Desarrollo de editores textuales con Xtext · 2013-11-21 · producen un árbol de tokens terminales y no terminales. Estas reglas pueden devolver un tipo EDataType. 21/11/13](https://reader034.vdocumento.com/reader034/viewer/2022042118/5e97722e2e141363d509ba9d/html5/thumbnails/31.jpg)
Creación de un proyecto EMF
21/11/13 PL2 - Desarrollo de editores textuales con Xtext 31
File → New Project → Empty EMF Project En primer lugar, crearemos un metamodelo del lenguaje dentro
de un proyecto EMF
![Page 32: P5 - Desarrollo de editores textuales con Xtext · 2013-11-21 · producen un árbol de tokens terminales y no terminales. Estas reglas pueden devolver un tipo EDataType. 21/11/13](https://reader034.vdocumento.com/reader034/viewer/2022042118/5e97722e2e141363d509ba9d/html5/thumbnails/32.jpg)
Diseño del metamodelo
21/11/13 PL2 - Desarrollo de editores textuales con Xtext 32
File → New → Ecore Diagram
![Page 33: P5 - Desarrollo de editores textuales con Xtext · 2013-11-21 · producen un árbol de tokens terminales y no terminales. Estas reglas pueden devolver un tipo EDataType. 21/11/13](https://reader034.vdocumento.com/reader034/viewer/2022042118/5e97722e2e141363d509ba9d/html5/thumbnails/33.jpg)
Creación del modelo de generación de código
21/11/13 PL2 - Desarrollo de editores textuales con Xtext 33
File → New → EMF Generator Model
![Page 34: P5 - Desarrollo de editores textuales con Xtext · 2013-11-21 · producen un árbol de tokens terminales y no terminales. Estas reglas pueden devolver un tipo EDataType. 21/11/13](https://reader034.vdocumento.com/reader034/viewer/2022042118/5e97722e2e141363d509ba9d/html5/thumbnails/34.jpg)
Generación del código Java
21/11/13 PL2 - Desarrollo de editores textuales con Xtext 34
![Page 35: P5 - Desarrollo de editores textuales con Xtext · 2013-11-21 · producen un árbol de tokens terminales y no terminales. Estas reglas pueden devolver un tipo EDataType. 21/11/13](https://reader034.vdocumento.com/reader034/viewer/2022042118/5e97722e2e141363d509ba9d/html5/thumbnails/35.jpg)
Creación de un proyecto Xtext (I)
21/11/13 PL2 - Desarrollo de editores textuales con Xtext 35
File → New Project → Xtext Project From Existing Ecore Models
![Page 36: P5 - Desarrollo de editores textuales con Xtext · 2013-11-21 · producen un árbol de tokens terminales y no terminales. Estas reglas pueden devolver un tipo EDataType. 21/11/13](https://reader034.vdocumento.com/reader034/viewer/2022042118/5e97722e2e141363d509ba9d/html5/thumbnails/36.jpg)
Creación de un proyecto Xtext (II)
21/11/13 PL2 - Desarrollo de editores textuales con Xtext 36
![Page 37: P5 - Desarrollo de editores textuales con Xtext · 2013-11-21 · producen un árbol de tokens terminales y no terminales. Estas reglas pueden devolver un tipo EDataType. 21/11/13](https://reader034.vdocumento.com/reader034/viewer/2022042118/5e97722e2e141363d509ba9d/html5/thumbnails/37.jpg)
Creación de un proyecto Xtext (III)
21/11/13 PL2 - Desarrollo de editores textuales con Xtext 37
![Page 38: P5 - Desarrollo de editores textuales con Xtext · 2013-11-21 · producen un árbol de tokens terminales y no terminales. Estas reglas pueden devolver un tipo EDataType. 21/11/13](https://reader034.vdocumento.com/reader034/viewer/2022042118/5e97722e2e141363d509ba9d/html5/thumbnails/38.jpg)
Derivación de la gramática (I)
21/11/13 PL2 - Desarrollo de editores textuales con Xtext 38
grammar es.uca.pl2.QuizDSL with org.eclipse.xtext.common.Terminals
import "platform:/resource/encuestasEMF/model/encuestas.ecore“ import "http://www.eclipse.org/emf/2002/Ecore" as ecore
De un paquete del modelo a una nueva gramática
![Page 39: P5 - Desarrollo de editores textuales con Xtext · 2013-11-21 · producen un árbol de tokens terminales y no terminales. Estas reglas pueden devolver un tipo EDataType. 21/11/13](https://reader034.vdocumento.com/reader034/viewer/2022042118/5e97722e2e141363d509ba9d/html5/thumbnails/39.jpg)
Derivación de la gramática (II)
21/11/13 PL2 - Desarrollo de editores textuales con Xtext 39
Quiz returns Quiz: 'Quiz‘ ‘{‘ … ‘}‘ ;
De clases del modelo a reglas de la gramática
![Page 40: P5 - Desarrollo de editores textuales con Xtext · 2013-11-21 · producen un árbol de tokens terminales y no terminales. Estas reglas pueden devolver un tipo EDataType. 21/11/13](https://reader034.vdocumento.com/reader034/viewer/2022042118/5e97722e2e141363d509ba9d/html5/thumbnails/40.jpg)
Derivación de la gramática (III)
21/11/13 PL2 - Desarrollo de editores textuales con Xtext 40
Option returns Option: … ('title' title=EString)? … ;
De atributos de clase a asignaciones simples en una regla
![Page 41: P5 - Desarrollo de editores textuales con Xtext · 2013-11-21 · producen un árbol de tokens terminales y no terminales. Estas reglas pueden devolver un tipo EDataType. 21/11/13](https://reader034.vdocumento.com/reader034/viewer/2022042118/5e97722e2e141363d509ba9d/html5/thumbnails/41.jpg)
Derivación de la gramática (IV)
21/11/13 PL2 - Desarrollo de editores textuales con Xtext 41
Quiz returns Quiz: … ('questions' '{' questions+=Question ( "," questions+=Question)* '}' )? … ;
De composición a asignaciones
múltiples en una regla
![Page 42: P5 - Desarrollo de editores textuales con Xtext · 2013-11-21 · producen un árbol de tokens terminales y no terminales. Estas reglas pueden devolver un tipo EDataType. 21/11/13](https://reader034.vdocumento.com/reader034/viewer/2022042118/5e97722e2e141363d509ba9d/html5/thumbnails/42.jpg)
Derivación de la gramática (V)
21/11/13 PL2 - Desarrollo de editores textuales con Xtext 42
Question returns Question: MultipleChoice | SingleChoice | Text;
De una herencia de clases a una
regla con alternativas
![Page 43: P5 - Desarrollo de editores textuales con Xtext · 2013-11-21 · producen un árbol de tokens terminales y no terminales. Estas reglas pueden devolver un tipo EDataType. 21/11/13](https://reader034.vdocumento.com/reader034/viewer/2022042118/5e97722e2e141363d509ba9d/html5/thumbnails/43.jpg)
Derivación de la gramática (VI)
21/11/13 PL2 - Desarrollo de editores textuales con Xtext 43
Text returns Text: 'Text' '{‘ ('title' title=EString)? ('description' description=EString)? ('rating' rating=EFloat)? '}';
Des-factorización de atributos de clase base sobre asignaciones
![Page 44: P5 - Desarrollo de editores textuales con Xtext · 2013-11-21 · producen un árbol de tokens terminales y no terminales. Estas reglas pueden devolver un tipo EDataType. 21/11/13](https://reader034.vdocumento.com/reader034/viewer/2022042118/5e97722e2e141363d509ba9d/html5/thumbnails/44.jpg)
Generar artefactos del editor
21/11/13 PL2 - Desarrollo de editores textuales con Xtext 44
[File *.mwe2] Run As → MWE2 Workflow
![Page 45: P5 - Desarrollo de editores textuales con Xtext · 2013-11-21 · producen un árbol de tokens terminales y no terminales. Estas reglas pueden devolver un tipo EDataType. 21/11/13](https://reader034.vdocumento.com/reader034/viewer/2022042118/5e97722e2e141363d509ba9d/html5/thumbnails/45.jpg)
Estructura de código del editor
21/11/13 PL2 - Desarrollo de editores textuales con Xtext 45
![Page 46: P5 - Desarrollo de editores textuales con Xtext · 2013-11-21 · producen un árbol de tokens terminales y no terminales. Estas reglas pueden devolver un tipo EDataType. 21/11/13](https://reader034.vdocumento.com/reader034/viewer/2022042118/5e97722e2e141363d509ba9d/html5/thumbnails/46.jpg)
Desarrollo de una validación
21/11/13 PL2 - Desarrollo de editores textuales con Xtext 46
![Page 47: P5 - Desarrollo de editores textuales con Xtext · 2013-11-21 · producen un árbol de tokens terminales y no terminales. Estas reglas pueden devolver un tipo EDataType. 21/11/13](https://reader034.vdocumento.com/reader034/viewer/2022042118/5e97722e2e141363d509ba9d/html5/thumbnails/47.jpg)
Test del editor textual
21/11/13 PL2 - Desarrollo de editores textuales con Xtext 47
[Project UI] Run as → Eclipse Application
![Page 48: P5 - Desarrollo de editores textuales con Xtext · 2013-11-21 · producen un árbol de tokens terminales y no terminales. Estas reglas pueden devolver un tipo EDataType. 21/11/13](https://reader034.vdocumento.com/reader034/viewer/2022042118/5e97722e2e141363d509ba9d/html5/thumbnails/48.jpg)
RESUMEN DESARROLLO DE EDITORES TEXTUALES CON XTEXT
21/11/13 48 PL2 - Desarrollo de editores textuales con Xtext
![Page 49: P5 - Desarrollo de editores textuales con Xtext · 2013-11-21 · producen un árbol de tokens terminales y no terminales. Estas reglas pueden devolver un tipo EDataType. 21/11/13](https://reader034.vdocumento.com/reader034/viewer/2022042118/5e97722e2e141363d509ba9d/html5/thumbnails/49.jpg)
¿Qué hemos aprendido hoy?
� Desarrollar DSLs textuales con Xtext. � Xtext genera automáticamente los
componentes necesarios para usar nuestros DSLs dentro de Eclipse.
� Sólo necesitamos diseñar una gramática e implementar algún comportamiento adicional para nuestro editor.
� La gramática BNF puede ser derivada a partir de un metamodelo Ecore.
21/11/13 PL2 - Desarrollo de editores textuales con Xtext 49
![Page 50: P5 - Desarrollo de editores textuales con Xtext · 2013-11-21 · producen un árbol de tokens terminales y no terminales. Estas reglas pueden devolver un tipo EDataType. 21/11/13](https://reader034.vdocumento.com/reader034/viewer/2022042118/5e97722e2e141363d509ba9d/html5/thumbnails/50.jpg)
21/11/13 50 PL2 - Desarrollo de editores textuales con Xtext
Desarrollo de editores textuales con Xtext
Procesadores de Lenguajes 2
Iván Ruiz Rube [email protected]