ANTLR, как конвертировать данные BNF, EBNF в ANTLR? - PullRequest
4 голосов
/ 12 июля 2010

Я должен сгенерировать парсер данных CSV.Каким-то образом мне удалось написать BNF, EBNF для данных CSV, но я не знаю, как преобразовать это в грамматику ANTLR (которая является генератором парсера).Например, в EBNF мы пишем:

[{header entry}newline]newline

, но когда я пишу это в ANTLR для генерации парсера, он выдает ошибку и не принимает скобки.Я не эксперт в ANTLR, кто-нибудь может помочь?

1 Ответ

6 голосов
/ 12 июля 2010

Привет, мне нужно сгенерировать парсер данных CSV ...

На большинстве известных мне языков уже существует приличный сторонний парсер CSV.Итак, есть вероятность, что вы заново изобретаете колесо.

Например, в EBNF мы пишем [{header header} newline] newline

Эквивалент в ANTLR будет выглядетькак это:

((header entry)* newline)? newline

Другими словами:

                 | (E)BNF | ANTLR
-----------------+--------+------
'a' zero or once | [a]    | a?
'a' zero or more | {a}    | a*
'a' once or more | a {a}  | a+

Обратите внимание, что вы можете группировать правила, используя круглые скобки (под-правила так называются):

'a' 'b'+

совпадений: ab, abb, abbb, ..., а:

('a' 'b')+

совпадений: ab, abab, ababab, ...

...