2009-12-09 4 views
0

Je suis nouveau à ANTLR et je suis venu avec cette règle lexer pour analyser les commentaires, ça va marcher?Commentaire règle lexer

COMMENT_LINE  : (COMMENT (. - LINE_ENDING)* LINE_ENDING){$channel=hidden}; 

(je ne pouvais pas trouver quoi que ce soit en ce qui concerne la syntaxe comme celle-ci dans les docs)

+0

Outre le fait que cela dépend de toutes les autres règles de analyseurs lexicaux dans votre grammaire, le signe moins, '-', provoquera probablement une sorte d'erreur. Pouvez-vous expliquer ce que vous entendez par là? Et pouvez-vous donner quelques exemples des chaînes que vous essayez d'analyser? –

+0

Toutes les autres "règles" mentionnées sont en fait des jetons, j'essaie de faire correspondre le mot-clé de commentaire suivi du reste de la ligne. – RCIX

+0

L'ordre des règles lexer est également important. Par exemple, si la règle lexer 'ANY_CHAR:. ; 'n'est pas la dernière règle, la grammaire ne fonctionnera pas car toute règle après celle-ci ne pourra jamais correspondre à quoi que ce soit puisque' ANY_CHAR' engloutira tout. Mais je suppose que Bojan a répondu avec succès à votre question, non? –

Répondre

2

Votre règle ne compile pas du tout. Si vous utilisez ANTLRWorks pour créer une nouvelle grammaire lexer, vous pouvez cocher une case pour qu'elle génère une règle lexer qui corresponde aux commentaires sur une seule ligne. Il génère ceci:

COMMENT 
    : '//' ~('\n'|'\r')* '\r'? '\n' {$channel=HIDDEN;} 
    ; 

Vous pouvez utiliser quelque chose comme ça pour correspondre à une seule ligne Commentaires:

COMMENT_LINE 
    : COMMENT (options{greedy=false;}: .)* LINE_ENDING {$channel=HIDDEN;} 
    ; 
+0

Cool. une raison quelconque pour laquelle ANTLRWorks déclare que "Impossible d'afficher la règle COMMENT_LINE parce que l'état de départ n'a pas été trouvé"? – RCIX

+0

Peu importe, je l'ai compris. – RCIX