Кристофер Хант написал:
- Примечание 1: Следующие альтернативы никогда не могут быть сопоставлены: 1
~('*/')
неверно: в правилах лексера можно отрицать только отдельные символы (!).В своем фрагменте вы пытаетесь отрицать что-то в правиле парсера.В правилах синтаксического анализа вы не отрицаете символы, но токены.Например:
parse : ~A;
foo : .;
A : 'A';
B : 'B';
C : 'C';
правило parse
будет не соответствовать любому символу, кроме 'A'
, но соответствует 'B'
или 'C'
.И foo
не соответствует ни одному символу, но соответствует любому токену (или правилу лексера).
Кристофер Хант писал:
- Примечание 2: Решение может соответствовать входным данным, таким как "_" .. '.' ", Используя несколько альтернатив: 1, 2 В результате альтернатива (ы) 2 были отключены для этого ввода
Два вопроса:
- Вы опубликовали всю грамматику?
- Вы пытаетесь проанализировать весь файл JS или вы просто «фильтруете» файлы JS ивытащить комментарии JavaDoc?
Если это последнее, есть гораздо более простой способ сделать это с помощью ANTLR (и может дать объяснение, если это так).
РЕДАКТИРОВАТЬ
Проще всего просто добавить новое DocComment
правило лексера и поместить его чуть выше (существующего) Comment
правила:
DocComment
: '/**' (options {greedy=false;} : .)* '*/'
;
Comment
: '/*' (options {greedy=false;} : .)* '*/' {$channel=HIDDEN;}
;