Подтвердить что ты не робот

Имеет ли С# (прямой) порт flex/yacc? Или что люди lexer/parser используют для С#?

Возможно, я ошибаюсь, но похоже, что нет прямого порта flex/bison (lex/yacc) для С#/. NET.

Для анализатора LALR я нашел GPPG/GPLEX, а для парсера LL - знаменитый ANTLR. Но я хочу как можно больше использовать мою грамматику flex/bison.

  • Есть ли какой-либо прямой порт flex/bison для С#?
  • Какие пользователи lexer/parser обычно используют для С#? Есть ли причина для этого выбора?
4b9b3361

Ответ 1

Думаю, ваш лучший выбор - это GPLEX/GPPG, это самая близкая вещь для Yacc/Lex для С#, о которой я знаю, и вам придется переносить свои действия на С# независимо.

Я также использовал Coco/R, ANTLR (конечно) и недавно играл с Irony.net, fslex/fsyacc (F #) и fparsec (F #).

Вот несколько ссылок

Fparsec

Coco/R

Irony.net

Генератор парсеров Gardens Point

Gardens Point Lex

У меня нет технической причины использовать один против другого: я играю с ними в основном для удовольствия. Я действительно создал несколько DSL для рабочих проектов много лет назад, но я передал сканеры/парсеры на них (тогда я работал в основном на Pascal, и я обнаружил, что TP Lex/Yacc не устраивает мои вкусы и DSL были достаточно простыми). Я обнаружил, что FParsec и Irony соответствуют моим вкусам лучше всего, так как я считаю, что другие несколько "грязные" (лишенные элегантности).

Ответ 2

ANTLR - очень зрелый (и удивительный) генератор парсера/лексера. Первоначально он создавал Java-код, но теперь он может ориентироваться на несколько языков, включая С#.