Къде мога да намеря граматика на C# 3.0?

Планирам да напиша компилатор C# 3.0 на C#. Къде мога да получа граматиката за генериране на анализатор?

За предпочитане такъв, който работи с 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# компилатори с отворен код. C# компилаторът на Mono е написан на 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# (или наистина всеки друг език), вие не само се нуждаете от анализатор (следователно граматика), но също така трябва да изграждате дървета, да създавате таблици със символи, да анализирате използването на символи, ... Има много повече за това е само граматиката. Моно рамката може да е много по-полезна, отколкото си мислите.   -  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# Grammar на 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
@Pavel: Не е само това. Не поддържа генерични продукти. Вероятно ще напиша собствен анализатор или граматика от нулата, ако не мога да намеря сравнително добра граматика на C# 3.0. - person mmx; 13.10.2009

Разгледайте COCO/R изглежда, че имат езиковата спецификация за C# 3.0.

person ErvinS    schedule 14.10.2009