2016-12-03 4 views
1

У меня есть файл грамматики для ANTLR4.
У меня есть некоторые '(' и ')' токенов в нем, и я хотел бы, чтобы ANTLR4 пропустил его в зависимости от того, будет ли статический boolean равен true.Пропустить некоторые токены в зависимости от логического значения

Пример:

example 
    : '(' IDENTIFIER ')' 

IDENTIFIER: [a-z]+; 

Я хотел бы для ( и ) маркеров, которые будут пропущены, если определенная статическая boolean является `верно.

`Любой способ сделать это?

+0

Что означает «пропустить это»? –

+0

Чтобы этого не требовалось больше, как будто он вообще не был помещен в грамматику. – user3535030

+0

В правиле парсера? В правиле лексера? Это очень помогло бы с некоторыми примерами того, чего вы пытаетесь достичь. –

ответ

1

Попробуйте это:

grammar T; 

@parser::members { 
    boolean skipParens = true; 
} 

example 
: {skipParens}? IDENTIFIER 
|    '(' IDENTIFIER ')' 
; 

IDENTIFIER 
: [a-z]+ 
; 

Обратите внимание, что, делая это, ваша грамматика привязана к определенному языку (Java, в данном случае).