2014-06-12 3 views
0

J'essaye d'écrire un lexer avec ocamllex pour un langage natif spécial (qui est un peu modifié pour mes besoins). Certains mots doivent correspondre à leur premier caractère, qui est doublé. Mais je ne trouve aucun moyen d'exprimer cette répétition du premier omble. Ni je peux utiliser la syntaxe regexRépétition de correspondance avec regexp dans ocamllex

([ 'a' - 'z']) \ 1 [ 'a' - 'z'] +

avec cette "\ 1". Ocamllex dit "séquence d'échappement illégale \ 1". et je pense que c'est vraiment correct avec la syntaxe des expressions d'échappement, mais sûr que ce n'est pas ce que je voulais. Ni je peux utiliser la syntaxe de répétition avec des accolades de quelque façon (mais résoudre wont le problème de toute façon):

[ 'a' - 'z'] {2} [ 'a' - 'z'] +

Je pense qu'il existe un conflit avec le code oCaml dans les accolades après l'expression rationnelle.

Est-ce que quelqu'un a une idée pour ça?

merci beaucoup.

Répondre

1

L'expression rationnelle d'Ocamllex n'a pas de syntaxe de répétition. La syntaxe avaibable regex est comme indiqué dans le manuel de référence:

http://caml.inria.fr/pub/docs/manual-ocaml-4.01/lexyacc.html#sec274

Et je pense que vous pouvez lister manuellement les toutes les répétitions possibles comme ci-dessous:

("aa"|"bb"|"cc"|"dd"|"ee"|"ff"| ..............)['a'-'z']+ 
+0

merci pour valider mes soupçons. : D ce n'est pas une très bonne solution mais une nécessité ... oh Caml. – user3734280

Questions connexes