Каков наилучший способ создания парсера в C# для анализа моего языка? В идеале я хотел бы предоставить грамматику и получить абстрактные синтаксические деревья в качестве вывода. Большое спасибо, NestorЛучший/быстрый способ написать парсер в C#
ответ
У меня был хороший опыт работы с ANTLR v3. Безусловно, самое большое преимущество заключается в том, что он позволяет писать синтаксические анализаторы LL (*) с бесконечным взглядом - они могут быть довольно субоптимальными, но грамматика может быть написана самым простым и естественным способом, без необходимости реорганизации для работы с ограничениями парсера, и производительность парсера часто не очень важна (надеюсь, вы не пишете компилятор C++), особенно в учебных проектах.
Он также предоставляет неплохие средства для построения значимого ASTs без необходимости писать код - для каждой грамматики вы указываете «решающий» токен или подпрограмму, и это становится узлом дерева. Или вы можете написать деревообразование.
Посмотрите на следующие грамматик Antlr (перечислены здесь в порядке возрастания сложности), чтобы получить суть того, как она выглядит и чувствует себя
- JSON grammar - с продукций дерева
- Lua grammar
- C grammar
Вы можете изучить исходный код для Mono C# compiler.
Спасибо. Я не пытаюсь написать парсер для C#, но синтаксический анализатор для моего собственного языка, синтаксический анализатор написан на C#. Большое спасибо за ваше предложение. – Nestor
Пока еще в ранней бета-версии Oslo Язык моделирования и инструменты MGrammar от Micro мягкие демонстрируют некоторые обещания.
Да. Я видел это. Мне нравится редактор (настройка подсветки синтаксиса на мою грамматику). Но это немного рано использовать. Похоже. – Nestor
@ Нестор - Я согласен, что использовать его еще рано, но я подумал, что это заслуживает упоминания. –
+1 для вашего комментария. Это правда.Я бы использовал Осло, если бы он был в его окончательном выпуске. – Nestor
Lex и yacc все еще мои любимые. Неясно, если вы только начинаете, но очень просто, быстро и легко, когда у вас есть жаргон.
Вы можете заставить его делать все, что угодно; генерировать код C#, строить другие грамматики, эмулировать инструкции, что угодно.
Это не очень, это текстовый формат и LL1, поэтому ваш синтаксис должен соответствовать этому.
С положительной стороны, это везде. В нем есть отличные книги О'райли, множество примеров кода, множество готовых грамматик и множество библиотек родного языка.
Здесь есть короткая статья here о создании парсера LL (1), конечно, вы также можете использовать генератор.
- 1. Каков наилучший способ написать синтаксический токенизатор/парсер в C?
- 2. Каков наилучший способ написать парсер вручную?
- 3. написать парсер простого языка
- 4. Как я могу написать парсер?
- 5. Как написать рекурсивный парсер спуска?
- 6. Как написать собственный парсер для (f) lex?
- 7. Как написать парсер, который обрабатывает операторы импорта?
- 8. Как написать буквенно-цифровой парсер файлов?
- 9. C/C++ JSON парсер
- 10. Как написать парсер Scala для путей?
- 11. Как написать парсер для haml-подобных языков?
- 12. Как написать рекурсивный парсер спуска с нуля?
- 13. Лучший способ написать рекурсивную функцию в C++?
- 14. Как написать парсер для унифицированного синтаксиса diff
- 15. Как написать парсер GML с помощью Geotools?
- 16. ввод текста парсер в C#
- 17. Ищет парсер кода C#
- 18. Нужна структура C парсер
- 19. Нужный C++ парсер
- 20. Простой C XML парсер
- 21. C++ .net HTML-парсер
- 22. Лучший парсер для C#?
- 23. Antlr4: тестирование C# -парсер
- 24. подталкивания XML парсер C++
- 25. рекурсивный спуск парсер C Программа
- 26. Ссылка C Flex lexer на C++ парсер
- 27. писать парсер в прологе
- 28. Нечувствительный к регистру XML-парсер в C#
- 29. уборщик способ написать следующее
- 30. Простой способ написать это, если функция C++
Спасибо! Хорошее предложение – Nestor
Еще раз спасибо. Очень полезные указатели. – Nestor