J'écris un lexer et un parser pour les formules Excel.Ordre de préséance dans lexer
Dans Excel, nous pouvons attribuer un nom à une cellule. Par exemple, abc
est un nom valide, alors qu'il est interdit de nommer une cellule B2
pour éviter la confusion avec la cellule B2
. Donc, une fois que nous rencontrons une formule =B2
, nous sommes sûrs que B2
fait référence à une cellule plutôt qu'à un nom défini par l'utilisateur.
Dans mes lexer_formula.mll
, je identificateurs définis:
let lex_cell = ['A' - 'Z']+ ['0' - '9']+ (* regular expressions to include all the cells *)
let lex_name = ['A' - 'Z' '0' - '9']+ (* regular expressions to include all the names *)
Mais une chaîne comme B2
avec correspondre à la fois lex_cell
et lex_name
, personne ne sait comment je pourrais dire au lexer d'examiner d'abord lex_cell
, puis lex_name
? Sera-t-il suffisant de mettre lex_cell
avant lex_name
dans rule token = parse
?
Utilisez-vous réellement ocamllex? Vous avez beaucoup de tags, mais vous ne dites jamais quel générateur de scanner vous utilisez. – rici
Oui, j'utilise 'ocamllex'. – SoftTimur