Я никогда не делал Бизона или Зубра прежде.
как я могу начать?
Моя реальная цель состоит в том, чтобы произвести рабочего Зубра / Семантическую грамматику для C#, чтобы позволить C# быть отредактированным в emacs с завершением кода и всех других положительных героях CEDET. (Для тех, кто не знает, Зубр является портом emacs-шепелявости Бизона GNU, который включен в CEDET. Зубр, по-видимому, является зубром. И Бизон, я беру его, является игрой на словах, происходящей из YACC. И CEDET является Набор Средств разработки Emacs. Все нагнали? Я не собираюсь пытаться определить emacs.)
Microsoft обеспечивает грамматику BNF для C#, включая все расширения LINQ, в справочном документе языка. Я смог перевести это в .wy файл, который компилирует успешно с semantic-grammar-create-package
.
Но скомпилированная грамматика не "работает". В некоторых случаях грамматика "находит" enum
объявления, но нет class
объявления. Почему?Я не знаю. Я не смог заставить это распознавать атрибуты. Я не нахожу, что "отладка" грамматики очень легка.
Я думал, что предприму шаги назад и попытаюсь произвести грамматику зубра для значительно более простого языка, игрушечного языка только с несколькими ключевыми словами. Только к виду усиления некоторый опыт. Даже это доказывает проблему.
Я видел .info документы о грамматике fw и зубра, но... все еще те вещи действительно не разъясняются для меня, как материал действительно работает.
Так
Q1: какие-либо подсказки относительно отладки грамматики зубра в emacs? Существует ли способ выполнить "подобную линту" вещь на грамматике, чтобы узнать, существуют ли неиспользованные правила, тупиковый материал как этот? Что относительно способности смотреть синтаксический анализатор в действии? Что-нибудь как этот?
Q2: Какие-либо подсказки, на подходя к скорости на бизоне/зубре в целом? То, что я думаю, является инструментом, который позволит мне получать некоторое понимание, как правила работают. Что-то, что обеспечивает некоторую прозрачность, вместо "это, не работало" опыт, который я получаю теперь с Зубром.
Q3: вместо того, чтобы продолжать бороться с этим, я должен сдаться и стать фермером, использующим только органические удобрения?
PS: Я знаю о существующей грамматике C# в contrib каталоге CEDET/semantic. Та вещь работы, но... Это не поддерживает последнюю спецификацию C#, включая LINQ, частичные классы и методы, урожай, анонимные методы, объектные инициализаторы, и так далее. Также это главным образом плывет на плоскодонке при парсинге набора кода C#. Это пронюхивает классы и методы, и затем прыгает с парашютом. Даже циклы foreach не сделаны совершенно верно. Это хорошо насколько это идет, но я хотел бы видеть, что он лучше. То, что я пытаюсь сделать, делают это текущим, и также расширяют его для парсинга большего количества кода C#.
Вы можете посмотреть пример calc в каталоге semantic / wisent. Это довольно просто, а также показывает, как использовать функции% left и% right. Он будет «выполнять» код вместо того, чтобы преобразовывать его в теги. Некоторые другие простые грамматики включают синтаксический анализатор точек в cogre и синтаксический анализатор srecode в srecode.
Для быстрой отладки в меню есть флаг подробности, хотя, честно говоря, я не пробовал. Также существует wisent-debug-on-entry, которая позволяет вам выбрать действие, которое заставит отладчик Emacs останавливаться в этом действии, чтобы вы могли видеть значения.
В более старом «бычьем» парсере есть режим отладки, который позволяет вам выполнять пошаговые инструкции, но он никогда не переносился на wisent. Это функция, которую я очень упустил, когда писал парсеры Wisent.