Ometa es "un nuevo lenguaje orientado a objetos para la coincidencia de patrones". Me he encontrado con la coincidencia de patrones en idiomas como las herramientas de Oz para analizar gramáticas como Lexx/Yacc o Pyparsing antes. A pesar de ver el código de ejemplo, leer las discusiones y hablar con un amigo, todavía no soy capaz de entender realmente qué hace especial a Ometa (o al menos, por qué algunas personas creen que es). ¿Alguna explicación?¿Qué hace que Ometa sea especial?
Respuesta
Es un metalenguaje, por lo que puedo decir. Puede crear construcciones de lenguaje nuevas y crear DSL; pero lo más convincente es que puede subclase de analizadores existentes para extender un idioma. Eso es lo que puedo recordar al respecto, de todos modos.
He encontrado que esto es interesante: http://www.moserware.com/2008/06/ometa-who-what-when-where-why.html
Además, lo más importante para mí, el puerto de Squeak Ometa permite reglas izquierda recursiva.
Desde su patrimonio PEG se pone marcha atrás y la búsqueda hacia delante ilimitada. La memorización de resultados de análisis previos permite tiempos de análisis lineal (casi todo el tiempo (*)).
producciones de orden superior permiten que uno refactorizar fácilmente una gramática.
This paper - Los analizadores de Packrat pueden admitir la recursividad izquierda: explica las propiedades recursivas a la izquierda.
(*) La sección 5 del documento explica que se pueden sufrir tiempos de parlamento superlineales, pero este problema no se manifiesta en gramáticas prácticas.
¿Presumiblemente no puede haber dejado los recursivos y los tiempos de parse lineales? –
Sí, puede hacerlo, debido a la memorización. bueno, la mayoría del tiempo. La Sección 5 del documento explica más. –
+1 para las producciones de orden alto :) – elias
- 1. ¿Qué hace que el encuadernado sea lento?
- 2. ¿Qué hace que STL sea rápido?
- 3. ¿Qué hace que Oracle sea más escalable?
- 4. ¿Qué hace que ágil sea mejor que shiro?
- 5. ¿Qué hace que PostgreSQL sea más avanzado que MySQL?
- 6. ¿Qué hace que Git sea mejor que Subversion para fusionarse?
- 7. ¿Qué hace que la bandera UnhandledExceptionEventArgs.IsTerminating sea verdadera o falsa?
- 8. ¿Qué hace que un lenguaje sea orientado a objetos?
- 9. ¿Qué hace que este "declarador no sea válido"? C++
- 10. ¿Qué hace que una entrada sea vulnerable a XSS?
- 11. ¿Qué hace que Ruby sea un lenguaje elegante?
- 12. ¿Qué hace que MVVM sea especialmente adecuado para WPF?
- 13. ¿Qué hace que una declaración SQL sea sargable?
- 14. ¿Qué hace que una gran especificación funcional sea genial?
- 15. ¿Qué hace que una aplicación web sea una aplicación amigable?
- 16. ¿Por qué desechar StreamReader hace que una secuencia sea ilegible?
- 17. ¿Qué hace que VxWorks sea tan determinista y rápido?
- 18. ¿Qué hace que este código sea "endian independiente"?
- 19. ¿Qué hace que ApplePC memcpy sea tan rápido?
- 20. ¿Qué hace que el dominio cruzado ajax sea inseguro?
- 21. ¿Qué hace que un portlet JSR-286 sea compatible?
- 22. Lo que hace Perl variable especial $ - [0] y $ + [0] significa
- 23. Lo que hace que algo sea iterable en python
- 24. sp_executesql que hace que mi consulta sea muy lenta
- 25. ¿Qué hace que javascript sea peligroso? ¿Qué usos usa javascript como?
- 26. ¿Qué hace que Groovy + Grails sea una configuración más productiva que Java EE?
- 27. ¿Qué hace que FSharpFunc <> sea más rápido que Func <>?
- 28. ¿Qué hace que PHP sea más lento que Java o C#?
- 29. ¿Por qué hace esto lo que hace?
- 30. ¿Hace que mysql sea sensible a mayúsculas y minúsculas?
subclases no es la única forma en que puede combinar las gramáticas, Ometa también proporciona un mecanismo de invocación dominio extranjero. Esto es útil cuando quiere "derivar" de más de una clase. –