Попытка создать грамматику C# для бизона/зубра

Я никогда не делал Бизона или Зубра прежде.
как я могу начать?

Моя реальная цель состоит в том, чтобы произвести рабочего Зубра / Семантическую грамматику для 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#.

11
задан Luke Girvin 4 September 2011 в 01:52
поделиться

1 ответ

Вы можете посмотреть пример calc в каталоге semantic / wisent. Это довольно просто, а также показывает, как использовать функции% left и% right. Он будет «выполнять» код вместо того, чтобы преобразовывать его в теги. Некоторые другие простые грамматики включают синтаксический анализатор точек в cogre и синтаксический анализатор srecode в srecode.

Для быстрой отладки в меню есть флаг подробности, хотя, честно говоря, я не пробовал. Также существует wisent-debug-on-entry, которая позволяет вам выбрать действие, которое заставит отладчик Emacs останавливаться в этом действии, чтобы вы могли видеть значения.

В более старом «бычьем» парсере есть режим отладки, который позволяет вам выполнять пошаговые инструкции, но он никогда не переносился на wisent. Это функция, которую я очень упустил, когда писал парсеры Wisent.

4
ответ дан 3 December 2019 в 11:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: