Где я могу найти грамматику C# 3.0?

Я планирую написать компилятор С# 3.0 на С#. Где взять грамматику для генерации парсера?

Желательно тот, который работает с ANTLR v3 без модификации.


person mmx    schedule 13.10.2009    source источник
comment
Вы в курсе, что мы уже бесплатно поставляем компилятор, который компилирует C# 3, верно? :-) А если серьезно, то зачем вы свою строите? Просто для удовольствия, или есть какая-то деловая цель? (Причина, по которой я спрашиваю, заключается в том, что мы очень заинтересованы в том, чтобы узнать, какие сервисы люди хотят получить от нашего компилятора, а не просто выдать мне немного IL для этого исходного кода.)   -  person Eric Lippert    schedule 13.10.2009
comment
Эрик: В первую очередь для развлечения. Тем не менее, время от времени у меня появляются некоторые языковые идеи, которые я хотел бы проверить.   -  person mmx    schedule 13.10.2009
comment
@Mehrdad, если у тебя получится какой-нибудь код, могу я поиграть с ним :)   -  person Stan R.    schedule 13.10.2009
comment
@Stan R: Сейчас существует множество компиляторов C# с открытым исходным кодом. Например, компилятор Mono C# написан на C#.   -  person mmx    schedule 13.10.2009
comment
Учитывая, что вам не нужны модификации, вы действительно не хотите много писать, не так ли?   -  person leppie    schedule 13.10.2009
comment
@leppie: я согласен с модификацией, но я не хочу слишком много тратить время на написание базовых вещей для языка C#. Я предпочитаю, чтобы один из них работал быстро, а потом экспериментировал с ним. Я уже умею делать парсеры. Моя основная цель не научиться разбирать материал. Я подумал о том, чтобы возиться с компилятором Mono C #. Я предпочитаю писать свои собственные.   -  person mmx    schedule 13.10.2009
comment
@Mehrdad: ... языковые идеи довольно расплывчаты. Если вы хотите сделать что-то интересное с C# (или действительно с любым другим языком), вам нужен не только синтаксический анализатор (следовательно, грамматика), но вам также нужно строить деревья, создавать таблицы символов, анализировать использование символов и т. д. это не только грамматика. Фреймворк Mono может быть намного полезнее, чем вы думаете.   -  person Ira Baxter    schedule 02.11.2009
comment
Ознакомьтесь с ответами на stackoverflow.com/questions/358052/c-anltr-grammar.   -  person Ira Baxter    schedule 02.11.2009
comment
Ира: Конечно, я видела этот вопрос. Я прямо упомянул C# 3.0, так как нашел кучу материала для 1.0. -- Я сказал, прежде всего, для забавы, между прочим. Для меня гораздо интереснее писать свои собственные и использовать их для тестирования, чем пытаться понять структуру кода, сделанного ребятами из Mono.   -  person mmx    schedule 02.11.2009
comment
@Mehrdad: я создал инструменты для управления языками. Они требуют гораздо больше работы, чем вы могли бы ожидать. Вы делаете то, что я считаю классической ошибкой, если бы у меня был только синтаксический анализатор... Удачи.   -  person Ira Baxter    schedule 02.11.2009
comment
Ира: Конечно. Он не должен представлять никакой ценности для бизнеса. Это личный проект, и это будет весело. Я буду делать это в свободное время.   -  person mmx    schedule 02.11.2009


Ответы (4)


Взгляните на Спецификация языка C#. В главе Б. Грамматика, вы найдете грамматику.

person Michael Damatov    schedule 14.10.2009
comment
Да, конечно, спецификация содержит грамматику. Однако грамматика в этом документе Word разбросана по всему документу и не подходит для создания синтаксического анализатора. - person mmx; 14.10.2009
comment
Он не только разбросан повсюду; у нас есть приложение в конце со всем этим в одном месте. Вероятно, вы правы в том, что потребуется некоторая модификация, чтобы заставить его работать для генератора синтаксических анализаторов. - person Eric Lippert; 14.10.2009
comment
Эрик: О, не заметил этот раздел. Спасибо, что указали. - person mmx; 14.10.2009
comment
Майкл: Это меньше 40 страниц. Когда я думаю об этом, можно справиться с этим и начать с нуля. +1 - person mmx; 14.10.2009

Я столкнулся с грамматикой ANTLR C# на CodePlex. Это относительно новый проект, использующий ANTLR 3.2. В нем говорится, что он поддерживает C # 4.0 и находится под лицензией Eclipse Public License (EPL).

Я немного поиграл с ним. У него есть куча тестовых файлов, содержащих выражения. Он поддерживает лямбда-выражения, небезопасный контекст... как и следовало ожидать. Он анализирует файл C# и предоставляет вам абстрактное синтаксическое дерево. Вы можете делать с ним все, что хотите.

person mmx    schedule 21.01.2010

Вы ищете что-то вроде этого или это?

Также см. вопрос по грамматике C# ANLTR.

person Rubens Farias    schedule 13.10.2009
comment
Связанная грамматика не является C# 3.0. Он не поддерживает лямбды. Это особенно важно для меня. - person mmx; 13.10.2009
comment
Казалось бы, добавление поддержки лямбда-выражений с точки зрения существующих конструкций в грамматике довольно тривиально, так как вам нужно только определить список аргументов. Однако для этого, вероятно, потребуется LL(), так как вы можете проанализировать что-то вроде (a** и не знать, будет ли это в конечном итоге выражением, подобным (a**b) (т.е. умножить a на результат разыменования b), или лямбда выражение (a** b) =>, пока не нажмете =>. Поскольку нет ограничений на количество косвенных обращений (указатель на указатель на...), мне кажется, что это LL(). Но поскольку ANTLR3 поддерживает опцию LL(*), это не проблема. - person Pavel Minaev; 13.10.2009
comment
@Павел: Дело не только в этом. Он не поддерживает дженерики. Я, вероятно, напишу свой собственный синтаксический анализатор или грамматику с нуля, если не смогу найти достаточно хорошую грамматику C# 3.0. - person mmx; 13.10.2009

Взгляните на COCO/R кажется, что у них есть спецификация языка для C# 3.0.

person ErvinS    schedule 14.10.2009