Коментирайте лексерското правило

Нов съм в ANTLR и измислих това правило за лексер за анализиране на коментари, ще работи ли?

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

(Не можах да намеря нищо относно синтаксис като този в документите)


person RCIX    schedule 09.12.2009    source източник
comment
Освен факта, че зависи от всички други лексни правила във вашата граматика, знакът минус, -, вероятно ще причини някакъв вид грешка. Можете ли да обясните какво имате предвид с това? И можете ли да дадете няколко примера за низовете, които се опитвате да анализирате?   -  person Bart Kiers    schedule 09.12.2009
comment
Всички други споменати правила всъщност са токени, опитвам се да съпоставя ключовата дума за коментар, последвана от останалата част от реда.   -  person RCIX    schedule 09.12.2009
comment
Редът на правилата на лексерите също е важен. Например, ако правилото на лексера ANY_CHAR : . ; не е последното правило, граматиката няма да работи, тъй като всяко правило след това никога няма да може да съпостави нищо, тъй като ANY_CHAR ще погълне всичко. Но предполагам, че Боян е отговорил успешно на въпроса ви, нали?   -  person Bart Kiers    schedule 09.12.2009
comment
Предишната ми забележка Освен факта, че зависи от всички други правила на лексер във вашата граматика, ... е малко подвеждаща (или дори неправилна!). Имах предвид: Освен факта, че може да зависи от някои други лексни правила във вашата граматика,.   -  person Bart Kiers    schedule 09.12.2009


Отговори (1)


Вашето правило изобщо не се компилира. Ако използвате ANTLRWorks, за да създадете нова граматика на лексер, можете да поставите отметка в квадратче, за да генерира правило за лексер, което съответства на коментари на един ред. Той генерира това:

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

Като алтернатива можете да използвате нещо подобно, за да съпоставите коментари в един ред:

COMMENT_LINE 
    : COMMENT (options{greedy=false;}: .)* LINE_ENDING {$channel=HIDDEN;}
    ;
person Bojan Resnik    schedule 09.12.2009
comment
Готино. някаква причина, поради която ANTLRWorks заявява, че не може да покаже правилото COMMENT_LINE, защото началното състояние не е намерено? - person RCIX; 09.12.2009