Necesito analizar un pequeño "mini idioma" que los usuarios pueden escribir en mi sitio. Me preguntaba cuáles son las contrapartes de lex y jacc o antlr para el mundo de php.¿Qué es un buen generador de analizadores para php?
Respuesta
que utilizan LIME Parser generator for PHP hace un par de años, y ya era maduro y estable.
El generador del analizador está escrito en PHP, lo que realmente no importa en ningún sentido técnico, ya que solo requerimos que el analizador generado esté en PHP, pero me gusta este detalle, no obstante. Me hace sentir menos disculparon por la escritura de software en PHP ;-)
EDIT:
debería añadir:
donde escribí "usado" sería más exacto decir que yo "jugado con". Aún no he escrito ningún código de producción con lima. Pero no veo ninguna razón para no hacerlo.
El "ejemplo de calculadora" que se proporciona con cal utiliza un método tokenize() que está muy lejos de ser un sustituto real de la potencia de lex. Pero si necesita un tokenizador real, debería ser posible usar lex en el "front-end" para alimentar los tokens a lime en el "back-end".
He transportado Jison, una copia de Bison en javascript, a php. Los resultados son un analizador asesino, capaz de manejar lexing/parsing muy simple y muy complejo. Ahora es parte de Jison, pero hay algunas actualizaciones en mi fork - https://github.com/robertleeplummerjr/jison. Los archivos están aquí - https://github.com/robertleeplummerjr/jison/tree/master/ports/php
Consulte el archivo léame en esa página, usted crea un analizador de javascript y php al mismo tiempo que son capaces de hacer lo mismo o cosas diferentes. ¡GUAY!
Te aconsejo que escribas tu propio analizador, ya que es bastante fácil hoy.
La manera más fácil de hacerlo sería, en mi opinión, crear una clase para cada tipo de sintaxis posible (expresión, prueba, bucle, etc.).
Luego, en cada clase, código los métodos siguientes:
- Un método para determinar de una cadena si la cadena es del tipo dado (
a+b
es de 'expresión' tipo,if(b)
no es) - un método para "ejecutar" este tipo (
a+b
volveráa->run() + b->run()
, ya->run()
devolverá un valor)
- 1. ¿Qué generador de analizadores usa CPython?
- 2. ¿Hay un buen generador de analizadores LALR tipo yacc/bison para .NET?
- 3. ¿Qué es un buen sistema de plantillas para PHP?
- 4. ¿hay un buen generador de código PHP CRUD?
- 5. ¿Es el generador de analizadores ANTLR el mejor para una aplicación C++ con memoria limitada?
- 6. ¿Hay un buen generador de administración para Ruby on Rails?
- 7. ¿Qué es un buen escaparate para Clojure?
- 8. ¿Qué es un buen compilador de c
- 9. ¿Qué es un buen compilador compilador de C#/generador de analizador?
- 10. ¿Cuál es un buen enfoque para desarrollar un simple generador/verificador de números de serie?
- 11. Generador de alimentación RSS decente para PHP
- 12. ¿Qué es un buen decompilador de C?
- 13. ¿Qué es un buen simulador de Robótica?
- 14. ¿Qué es un buen juego de codificación?
- 15. ¿Por qué analizadores sintácticos en lugar de solo analizadores configurables?
- 16. ¿Qué es un buen entorno de desarrollo Ruby para Mac?
- 17. ¿Qué es un buen editor de texto para la nube?
- 18. ¿Qué es un buen marco de botones CSS para Compass?
- 19. ¿Qué es un buen conjunto de heurísticas para enhebrar tweets?
- 20. Eclipse - ¿Qué es exactamente un generador?
- 21. ¿Qué es un buen HTML5 Outliner?
- 22. ¿Qué es un buen GeoTiff Viewer?
- 23. ¿Qué es un buen software wiki para programar tutoriales?
- 24. ¿Qué logging es un buen registro para su aplicación?
- 25. ¿Qué es un buen Business Rule Engine (BRE) para .Net?
- 26. Qué es un buen contenedor OO C++ para sqlite
- 27. ¿Qué es un buen complemento SVN para Eclipse?
- 28. ¿Qué es un buen sitio web para aprender prólogo?
- 29. ¿Qué es un buen libro multihilo para Delphi?
- 30. ¿Qué es un buen compilador BASIC para Mac OSX?
vi este generador, pero es de 4 años. Estaba pensando que podría haber algo más actualizado – Toad
Veamos algo de contenido en lugar de solo un montón de enlaces la próxima vez. –
@ts. Supongo que ya lo sabes, pero esto es totalmente tu responsabilidad, y solo tuya, como escritora de un post :) –