2009-09-19 7 views
0

Disons que j'ai deux règles comme ci-dessous:Comment «soustraire» les règles lexer dans ANTLR?

printable_characters : '\u0020' .. '\uFFEF' ; 

newline_characters : '\n' | '\r' ; 

Maintenant, disons que je veux faire une nouvelle règle appelée printable_no_newlines. Je voudrais le faire en soustrayant newline_characters de printable_characters comme ceci:

printable_no_newlines : printable_characters - newline_characters ; 

Cette syntaxe ne fonctionne pas dans antlr3 mais personne ne sait ce que la meilleure façon serait d'imiter cela sans retapant la règle entière?

Répondre

1

Je ne pense pas que ce soit possible. Je suis également sceptique qu'il ferait ce que vous voulez: par exemple, votre printable_new_newlines inclurait "foo\nbar", puisqu'il correspond à printable_characters, mais ne correspond pas newline_characters (car cela ne correspond qu'à des chaînes d'un caractère).

+0

Salut Martin. J'ai édité mon exemple pour avoir plus de sens. Je n'aurais pas dû utiliser. * Pour la règle des caractères imprimables. Si vous réexaminez maintenant la question, est-ce que cela a plus de sens pour ce que j'essaie de faire? –

+0

Certains des commentaires de Martin ne sont plus pertinents, mais le point clé de ce n'est pas possible sans écrire manuellement la différence de réglage est correcte. –

+0

@Jeffrey: votre modification ne rend toujours pas la requête sensée. Comme 'newline_characters' n'est pas inclus dans' printable_characters' (puisqu'ils sont en dessous de U + 0020), de toute façon, 'printable_no_newlines' serait le même que' printable_characters'. –

Questions connexes