2017-03-12 7 views
0

Je suis nouveau au concept de lexing et essaie d'écrire un lexer en OCaml pour lire l'entrée exemple suivant:Comment vais-je implémenter le lexing des chaînes en utilisant ocamllex?

(blue, 4, dog, 15) 

Fondamentalement, l'entrée est une liste d'une chaîne aléatoire ou entier. J'ai trouvé de nombreux exemples pour les entrées basées sur les int, car la plupart d'entre elles modélisent une calculatrice, mais n'ont trouvé aucune indication à travers des exemples ou la documentation des chaînes de lexage. Voici ce que j'ai jusqu'à mon lexer:

(* File lexer.mll *) 
{ 

open Parser 

} 

rule lexer_main = parse 
     [' ' '\r' '\t']  { lexer_main lexbuf }  (* skip blanks *) 
    | ['0'-'9']+ as lxm { INT(int_of_string lxm) } 
    | '('  { LPAREN } 
    | ')'  { RPAREN } 
    | ','  { COMMA } 
    | eof  { EOF } 
    | _  { syntax_error "couldn't identify the token" } 

Comme vous pouvez le voir je manque la capacité d'analyser des chaînes. Je suis conscient qu'une chaîne peut être représentée sous la forme ['a'-'z'] donc serait-ce aussi simple que ['a'-'z'] { STRING } Merci pour votre aide.

Répondre

1

La notation ['a'-'z'] représente un seul caractère, pas une chaîne. Ainsi, une chaîne est plus ou moins une séquence d'un ou plusieurs de ceux-ci. J'ai peur qu'il s'agisse d'une affectation, donc je vais juste dire que vous pouvez étendre un motif pour un seul caractère dans un motif pour une séquence du même type de caractère en utilisant la même technique que vous utilisez pour INT.

Cependant, je me demande si vous voulez vraiment que vos chaînes soient si restrictives. Sont-ils vraiment requis de se composer de caractères alphabétiques seulement?