Как «вычесть» правила лексера в ANTLR? - PullRequest
0 голосов
/ 19 сентября 2009

Допустим, у меня есть два правила, как показано ниже:

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

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

Теперь допустим, что я хочу создать новое правило с именем printable_no_newlines. Я хотел бы сделать это путем вычитания newline_characters из printable_characters примерно так:

printable_no_newlines : printable_characters - newline_characters ;

Этот синтаксис не работает в ANTLR3, но кто-нибудь знает, как лучше всего эмулировать это без повторного ввода всего правила?

1 Ответ

1 голос
/ 19 сентября 2009

Я не думаю, что это возможно. Я также скептически отношусь к тому, что он будет делать то, что вы хотите: например, ваш printable_new_newlines будет включать "foo\nbar", поскольку он соответствует printable_characters, но не соответствует newline_characters (поскольку это соответствует только односимвольным строкам) .

...