J'essaie d'analyser un certain nombre d'enregistrements de texte où les éléments d'un enregistrement sont séparés par un caractère '+', et où l'ensemble de l'enregistrement est terminé par un caractère '#'. Par exemple E1 + E2 + E3 + E4 + E5 + E6 #Analyseur ANTLR Question
Des éléments individuels peuvent être requis ou facultatifs. Si un élément est optionnel, sa valeur est simplement manquante. Par exemple, si E2 manquait, la chaîne d'entrée serait: E1 ++ E3 + E4 + E5 + E6 #.
Lorsque vous traitez des éléments traînants vides, le caractère séparateur ('+') peut également manquer. Si, par exemple, les 3 derniers éléments manquaient, la chaîne pourrait être: E1 + E2 + E3 #, mais cela pourrait aussi être: E1 + E2 + E3 +++ #
J'ai essayé la règle suivante dans Antlr:
'R1' 'E1 + E2 + E3' '+'? 'E4'? '+'? 'E5'? '+'? 'E6'? '#
mais Antlr se plaint que c'est ambigu ce qui bien sûr est correct (chaque jeton suivant E3 pourrait être E4, E5 ou E6). La syntaxe d'entrée est fixe (elle provient d'un système mainframe hérité), donc je me demandais si quelqu'un avait une solution à ce problème? Une alternative serait de spécifier toutes les permutations différentes dans la règle, mais ce serait une tâche majeure.
Meilleures salutations et merci,
Michael
Pourriez-vous publier * toutes * vos règles lexer? (en supposant que ce ne soit pas beaucoup d'entre eux) –