Je suis actuellement à la recherche d'un lexer / parseur qui génère du code SCALA à partir d'une grammaire BNF (un fichier Pour analyse, j'ai trouvé Pour Lexing, je n'ai rien trouvé. P>
J'ai aussi trouvé les célèbres combinateurs d'analyseurs em> de scala, mais (corrigez-moi si je me trompe), même s'ils sont assez attrayants, ils consomment beaucoup de temps et de mémoire, principalement en raison de Backtracking em>. p>
J'ai donc deux questions principales: p>
ocamlyacc code> avec précision et associativité). Je suis assez confus depuis que je n'ai presque rien trouvé sur la façon de le faire. P>
scala-bison code> (que j'ai beaucoup de difficulté à travailler avec). Tous les autres outils ne sont que des analyseurs Java importés dans Scala (comme
antlr code>). P>
3 Réponses :
scala 2.8 a un analyseur de packrat. Je cite les documents de l'API ici: P>
Packrat analyse est une technique pour mettre en œuvre la rampe, analyseurs de descente récursive, avec le avantage qu'il garantit illimité Lookahead et une période d'analyse linéaire. En utilisant cette technique, laissé récursif Les grammates peuvent également être acceptées. P> blockQuote>
comme l'un des auteurs du papier de Scalabison, j'ai rencontré ce problème plusieurs fois. :-) Ce que je ferais habituellement pour la numérisation dans Scala est d'utiliser jflex . Cela fonctionne étonnamment bien avec Scalabison et tout notre point de vue a été fait en utilisant cette combinaison. L'inconvénient malheureux est qu'il génère des sources Java, et la compilation prend donc un peu de gymnastique. Je crois que John Boyland (l'auteur principal du papier) a mis au point un mode de sortie Scala Pour JFlex, mais je ne pense pas que cela ait été publiquement libéré. P>
Pour mon propre développement, j'ai beaucoup travaillé avec des techniques d'analyse sans scanner. Les combinaisons d'analyseurs Packrat de Scala 2.8 sont assez bons, bien que toujours non généralisées. J'ai construit une bibliothèque expérimentale qui implémente une analyse généralisée dans le cadre de combinaisons d'analyseurs. Ses limites asymptotiques sont beaucoup meilleures que les combinaisons d'analyseurs traditionnels, mais dans la pratique, les frais généraux constants sont plus élevés (je travaille toujours dessus). P>
Merci pour la réponse et vos combinaisons GLL, je vais essayer de comprendre comment ça marche :) Mais je pense que je vais essayer de jouer avec Jflex et Scala ensemble.
Grâce à tout beaucoup de tutoriel (y compris une partie de la titunie sur Codecommit), j'ai finalement réussi à faire un simple lexer / analyseur avec des combinaisons d'analyseurs et sans trop de récursions .. Merci encore!
Je sais que cette question est ancienne, mais pour ceux qui sont toujours à la recherche d'un générateur lexer qui génèrent du code Scala, j'ai écrit une fourchette de jflex qui émet un scala plutôt que Java, y compris des plug-ins de Maven et SBT correspondants. Tous sont maintenant disponibles sur Maven Central. p>
Nous l'utilisons actuellement (y compris les plug-ins maven / sbt) pour jetons textuels anglais dans le cadre de la pipline de traitement de langue naturelle dans Factorie - Exemple de fichier .flex contenant scala ici . p>
C'est génial. J'avais publié Jflex 1.5 + échelle github.com/moy/jflex/relases , mais il semble que votre est plus à jour, aussi plus facile à trouver.
@Johntantangboyland J'aimerais avoir trouvé votre version avant d'écrire la mienne!