7 votes

Renvoyer des tokens multiples en ocamllex

Existe-t-il un moyen de renvoyer des jetons multiples dans OCamlLex ?

J'essaie d'écrire un lexer et un analyseur syntaxique pour un langage basé sur l'indentation, et j'aimerais que mon lexer renvoie de multiples DEDENT lorsqu'il remarque que le niveau d'indentation est inférieur à ce qu'il était auparavant. Cela lui permettra de notifier l'analyseur syntaxique lorsque plusieurs blocs se sont terminés.

En suivant cette méthode, je serais capable d'utiliser INDENT y DEDENT en tant que remplaçants immédiats des BEGIN y END car ces deux jetons seraient impliqués par l'expression INDENT y DEDENT jetons.

7voto

ygrek Points 5348

Retourne la liste des jetons. Si l'analyseur syntaxique ne peut pas gérer cela nativement (disons ocamlyacc) - insérez simplement un cache entre :

let cache =
  let l = ref [] in
  fun lexbuf ->
    match !l with
    | x::xs -> l := xs; x
    | [] -> match Lexer.tokens lexbuf with
            | [] -> failwith "oops"
            | x::xs -> l := xs; x

Vous pouvez également exécuter le lexer sur le document complet, puis exécuter l'analyseur syntaxique sur le flux de mots complet.

BTW avez-vous vu ocaml+twt ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X