Question

Je suis en train d'utiliser arboricole pour analyser un fichier ERB. Je dois être capable de gérer des lignes comme suit:

<% ruby_code_here %>
<%= other_ruby_code %>

Depuis arboricole est écrit en Ruby, et vous écrivez arboricole Grammaires à Ruby, est-il déjà une certaine façon existant arboricole dire « hey, recherchez le code Ruby ici et me donner son échec » sans avoir à me écrire séparée règles pour gérer toutes les parties du langage Ruby? Je suis à la recherche d'un moyen, dans mon dossier de grammaire .treetop, avoir quelque chose comme:

rule erb_tag
  "<%" ruby_code "%>" {
    def content
      ...
    end
  }
end

ruby_code est gérée par des règles qui arboricole fournit.

Modifier quelqu'un d'autre en utilisant Ruby analysable ERB -Lex, mais je suis des erreurs en essayant de reproduire ce qu'il a fait. Le programme rlex n'a pas produit une classe complète quand il a généré la classe de l'analyseur.

Modifier à droite, vous êtes déprimant beaucoup, mais merci pour l'info. :) Pour le projet de mon Maître, j'écris un générateur de test qui a besoin de travailler avec ERB en entrée. Heureusement, pour mes besoins, je ne dois reconnaître un certain nombre de choses dans le code ERB, tels que les relevés if et autres conditionals ainsi que des boucles. Je pense que je peux venir avec la grammaire arboricole pour correspondre à celle, avec la mise en garde qu'il ne soit pas complète pour Ruby.

Était-ce utile?

La solution

Pour autant que je sache, personne n'a encore créé une grammaire arboricole pour Ruby. (En fait, personne n'a jamais été en mesure de créer une grammaire pour Ruby autre que la grammaire YACC livré avec l'IRM et YARV.) Je sais que l'auteur de arboricole travaille sur un depuis plusieurs années , mais ce n'est pas une mince affaire. Obtenir la grammaire ANTLR qui est utilisé dans XRuby droite a pris environ 5 ans, et il est toujours pas totalement conforme.

La syntaxe de Ruby est insensément , mindbogglingly complexe.

Autres conseils

Non


Je ne pense pas. Spécification du complexe et subtile grammaire Ruby dans la cime des arbres serait un accomplissement majeur, mais il devrait être possible.

Le Grammer rubis réelle est écrit dans yacc. Maintenant, yacc est un outil légendaire, mais la cime des arbres génère une classe plus puissante de parseurs, il devrait donc être possible et peut-être quelqu'un l'a fait.

Il est pas un projet d'après-midi.

Peut être je plaisante mais si yacc est moins complexe que le rubis vous pourriez réaliser yacc dans la cime des arbres qui utilise la grammaire que rubis créée pour yacc.

Pour vos besoins, vous pouvez probablement vous en sortir sans analyse syntaxique tous Ruby. Qu'est-ce que vous avez réellement besoin est un moyen de détecter le%> obturant un bloc Ruby. Si vous ne voulez jamais à l'échec lorsque le code Ruby contient les caractères de fermeture, vous devez détecter ne importe où ces caractères peuvent se produire dans le texte Ruby; ce qui signifie que vous devez détecter toutes les formes de littéraux.

Cependant, pour vous besoins, vous pouvez probablement vous en sortir de reconnaître les cas les plus probables où%> se produirait dans le texte Ruby, et ignorer ces cas. Cela suppose bien entendu que tout manquement restant peut être pris en charge par l'obtention de votre utilisateur d'écrire l'ERB un peu différemment.

Pour ce que ça vaut, arboricoles lui-même « Parsis » blocs Ruby de cette façon; il seulement compte {et} caractères jusqu'à ce que celui de fermeture se trouve. Donc, si votre bloc contient un} dans une chaîne littérale, vous êtes cassé (mais vous pouvez contourner en incluant celui correspondant dans un commentaire).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top