Где все варианты грамматики в Antlr3? - PullRequest
3 голосов
/ 09 января 2011

В Antlr2 было множество параметров грамматики, которые можно было установить ( reference ). Теперь в Antlr3 у нас есть примерно 1/3 от количества опций ( ссылка ).

Итак, у меня есть два вопроса по этому поводу:

  1. Кто-нибудь знает, почему было выбрано так много вариантов и возвращается ли какой-нибудь из них?
  2. Имеет ли Antlr3 возможность делать то же, что и Antlr2, даже без всех этих опций?

Если говорить более конкретно по второму вопросу, я хочу иметь возможность сделать несколько вещей. Во-первых, я хочу изменить видимость сгенерированных классов лексера и синтаксического анализатора (то есть опция Antlr2 "classHeaderPrefix").

Во-вторых, я хочу иметь возможность игнорировать любые токены пробелов, найденные в определенных ключевых словах, например, наличие совпадений между "& keyword &" и "& k ey w o rd &" (т. Е. Опция Antlr2 "ignore", я думаю?)

Наконец, я хочу сделать некоторые ключевые слова нечувствительными к регистру (т. Е. Опция Antlr2 "caseSensitive").

1 Ответ

2 голосов
/ 09 января 2011

BluePlateSpecial писал :

Если говорить более конкретно по второму вопросу, я хочу иметь возможность сделать несколько вещей. Во-первых, я хочу изменить видимость сгенерированных классов лексера и синтаксического анализатора (т. Е. Опция Antlr2 "classHeaderPrefix").

В v3 нет способа сделать это.

BluePlateSpecial писал :

Во-вторых, я хочу иметь возможность игнорировать любые жетоны пробелов, найденные в определенных ключевых словах, такие как совпадение слов "& keyword &" и "& k ey word &" (т. Е. Опция Antlr2 "ignore", я думаю?) 1016 *

Эти опции могли быть удалены, потому что алгоритм LL (*) в лексере намного мощнее, чем тот, который использовался в v2. Теперь такая опция не нужна, так как это поможет:

FOO
  :  '&' (' ' | 'a'..'z')+ '&'
  ;

BluePlateSpecial писал :

Наконец, я хочу сделать определенные ключевые слова нечувствительными к регистру (т. Е. Опция Antlr2 "caseSensitive").

Это также невозможно в v3, кроме как сделать это "сложным" способом:

BAR
  :  ('b' | 'B') ('a' | 'A') ('r' | 'R')
  ;
...