2010-09-10 6 views
0

Salut Je cherche à créer un pseudo type de langage Markdown et un analyseur pour le parser en xhtml.Compilation/analyse des espaces significatifs

Je n'ai jamais écrit de compilateur ... J'ai regardé brièvement ANTLR et je me demande si ANTLR peut gérer les choses avec des espaces significatifs?

dire J'ai quelque chose comme ceci:

some text 

    some other text 

    # bullet point 

    # nested bullet point 

Selon le contexte et le nombre de places préfixant, ces lignes signifierait des choses différentes.

Quel est un bon outil à utiliser pour écrire un analyseur pour cela?

Merci, Alex

Répondre

2

ANTLR peut certainement être utilisé pour cela. Cependant, si vous êtes nouveau dans ANTLR ou générateurs d'analyseurs en général, je ne pense pas que je puisse donner une courte explication sur la façon de le faire exactement. Je vous recommande d'essayer quelques choses simples avec ANTLR et parcourir The Definitive ANTLR Reference. Il a même un paragraphe sur ce type de problème qui est similaire à l'analyse du code Python. Voir Chapitre 4.3 Règles, paragraphe Émission de plus d'un jeton par règle Lexer pour plus de détails.

1

Mon approche serait de rendre votre lexer générer indent/jetons retrait négatif. Stockez le niveau d'indentation actuel et faites correspondre un modèle comme \n *. Comptez le nombre d'espaces et, s'il est différent du niveau d'indentation actuel, émettez un jeton indent/outdent.

De même, comptez les onglets au début de la ligne. L'insertion d'une règle qui déclenche une erreur sur un modèle \n[ \t]* doit empêcher les utilisateurs de mélanger des onglets et des espaces.

Questions connexes