ANTLR: определить новый канал в грамматике - PullRequest
1 голос
/ 21 августа 2011

Я знаю, что в грамматике ANTLR можно переключаться между стандартными и скрытыми каналами токенов, но, скажем, мне нужен третий канал.Как я могу определить новый канал токена в грамматике?Например, допустим, я хочу канал с именем ALTERNATIVE.

Ответы [ 2 ]

2 голосов
/ 21 августа 2011

Они просто final int в Token классе , так что вы можете просто добавить дополнительные int в свой лексер, например:

grammar T;

@lexer::members {
  public static final int ALTERNATIVE = HIDDEN + 1;
}

// parser rules ...

FOO
  :  'foo' {$type=ALTERNATIVE;}
  ;

// other lexer rules ...

Соответствующие вопросы и ответы: Как получить правило анализатора Antlr для чтения как по умолчанию, так и из скрытого канала

1 голос
/ 21 августа 2011

Для цели C вы можете использовать

//This must be assigned somewhere
@lexer::context {
  ANTLR3_UINT32 defaultChannel;
}

TOKEN : 'blah' {$channel=defaultChannel;};

Это сбрасывается после каждого правила, поэтому, если вы хотите, чтобы назначение канала сохранялось между правилами, вам, возможно, придется переопределить nextTokenStr ().

...