[PEG] Парсер C# 4.0
От: hardcase Пират http://nemerle.org
Дата: 24.08.10 13:48
Оценка: 253 (9)
Здравствуйте, hardcase, Вы писали:

Парсер C#4.0, генерирующий AST, вроде как принял законченную форму к r9078. Кому интересно, может посмотреть и ужаснуться.

24.08.10 20:54: Ветка выделена из темы [PEG] Добавил в сниппеты еще один пример.
Автор: hardcase
Дата: 08.07.10
— VladD2
/* иЗвиНите зА неРовнЫй поЧерК */
Re: [PEG] Парсер C# 4.0
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.08.10 16:58
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Парсер C#4.0, генерирующий AST, вроде как принял законченную форму к r9078. Кому интересно, может посмотреть и ужаснуться.


Ужасаться там не чем. Наоборот — отличная работа! Надеюсь не за горами полноценный конвертер из C# в Nemerle и компиляция C#-исходников (без динамиков и ансэйфа) в рамках Nemerle-проектов.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: [PEG] Парсер C# 4.0
От: hardcase Пират http://nemerle.org
Дата: 03.09.10 18:27
Оценка: 174 (3)
Здравствуйте, hardcase, Вы писали:

H>Здравствуйте, hardcase, Вы писали:


H>Парсер C#4.0, генерирующий AST, вроде как принял законченную форму к r9078. Кому интересно, может посмотреть и ужаснуться.


Практически завершил работу над транслятором C# AST -> Nemerle AST.
В r9114 он умеет транслировать все мыслимые члены классов, предложения и выражения C#.
Осталось: трансляция LINQ, вменяемая работа с атрибутами (сейчас цель атрибутов игнорируется), ну и поиск багов, связанных с локациями.

НЕ поддерживаются следующие фичи C#:

Поддерживаются следующие фичи Nemerle:

Собственно говоря получился тот же Nemerle, с синтаксисом C#.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[2]: [PEG] Парсер C# 4.0
От: hardcase Пират http://nemerle.org
Дата: 04.09.10 11:33
Оценка:
Здравствуйте, hardcase, Вы писали:

H>вменяемая работа с атрибутами (сейчас цель атрибутов игнорируется)


Сделано в r9115. Остался LINQ.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[2]: [PEG] Парсер C# 4.0
От: hardcase Пират http://nemerle.org
Дата: 04.09.10 14:32
Оценка:
Здравствуйте, hardcase, Вы писали:

H>НЕ поддерживаются следующие фичи C#:


А также автоматическое преобразование в деревья выражений (то, что делает макрос ToExpression).
/* иЗвиНите зА неРовнЫй поЧерК */
Re[2]: [PEG] Парсер C# 4.0
От: hardcase Пират http://nemerle.org
Дата: 05.09.10 10:13
Оценка:
Здравствуйте, hardcase, Вы писали:

H>трансляция LINQ


Сделано в r9116. Решения взято из Linq.nproj.
Где-то там был TODO про GroupBy — он все еще актуален
/* иЗвиНите зА неРовнЫй поЧерК */
Re[3]: [PEG] Парсер C# 4.0
От: hardcase Пират http://nemerle.org
Дата: 06.09.10 08:44
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Где-то там был TODO про GroupBy — он все еще актуален


Уже нет.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[2]: [PEG] Парсер C# 4.0
От: VladD2 Российская Империя www.nemerle.org
Дата: 06.09.10 14:47
Оценка:
Здравствуйте, hardcase, Вы писали:

H>НЕ поддерживаются следующие фичи C#:

H>
  • модификаторы вариантности ref/out;

    А чё так? Немерл же их поддерживает.

    H>
  • конструкция goto (а также goto case и goto default);

    goto case и goto default можно было бы и реализовать. Какие с ними проблемы?

    H>
  • в конструкторах массивов c инициализатором игнорируется их размер, например тут: new int[4] { 1, 2, 3, 4 }.

    Можно переписывать в код отдельно создающие массив, и отдельно копирующий в него элементы из другого.

    H>Собственно говоря получился тот же Nemerle, с синтаксисом C#.


    Без синтаксических расширений.
  • Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[3]: [PEG] Парсер C# 4.0
    От: hardcase Пират http://nemerle.org
    Дата: 06.09.10 14:54
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>Здравствуйте, hardcase, Вы писали:


    H>>НЕ поддерживаются следующие фичи C#:

    H>>
  • модификаторы вариантности ref/out;

    VD>А чё так? Немерл же их поддерживает.


    А как их обрабатывать?


    H>>
  • конструкция goto (а также goto case и goto default);

    VD>goto case и goto default можно было бы и реализовать. Какие с ними проблемы?


    Я не знаю как их обработать.



    H>>
  • в конструкторах массивов c инициализатором игнорируется их размер, например тут: new int[4] { 1, 2, 3, 4 }.

    VD>Можно переписывать в код отдельно создающие массив, и отдельно копирующий в него элементы из другого.


    Это не спортивно. Нужно все же статически анализировать размеры. Сейчас выдается предупреждение.
  • /* иЗвиНите зА неРовнЫй поЧерК */
    Re[4]: [PEG] Парсер C# 4.0
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 06.09.10 16:50
    Оценка:
    Здравствуйте, hardcase, Вы писали:

    H>>>НЕ поддерживаются следующие фичи C#:

    H>>>
  • модификаторы вариантности ref/out;
    VD>>А чё так? Немерл же их поддерживает.

    H>А как их обрабатывать?


    VD>>goto case и goto default можно было бы и реализовать. Какие с ними проблемы?

    H>Я не знаю как их обработать.

    ОК. Подумаем.


    H>>>
  • в конструкторах массивов c инициализатором игнорируется их размер, например тут: new int[4] { 1, 2, 3, 4 }.

    VD>>Можно переписывать в код отдельно создающие массив, и отдельно копирующий в него элементы из другого.


    H>Это не спортивно. Нужно все же статически анализировать размеры. Сейчас выдается предупреждение.


    Что-то не понял. Что там анализировать то?
  • Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[2]: [PEG] Парсер C# 4.0
    От: hardcase Пират http://nemerle.org
    Дата: 07.09.10 06:51
    Оценка: 42 (1)
    Здравствуйте, hardcase, Вы писали:

    H>НЕ поддерживаются следующие фичи C#:

    H>
    Поддержка in/out реализована в r9120.
    /* иЗвиНите зА неРовнЫй поЧерК */
    Re[5]: [PEG] Парсер C# 4.0
    От: hardcase Пират http://nemerle.org
    Дата: 07.09.10 06:54
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    H>>>>в конструкторах массивов c инициализатором игнорируется их размер, например тут: new int[4] { 1, 2, 3, 4 }.


    VD>>>Можно переписывать в код отдельно создающие массив, и отдельно копирующий в него элементы из другого.


    H>>Это не спортивно. Нужно все же статически анализировать размеры. Сейчас выдается предупреждение.


    VD>Что-то не понял. Что там анализировать то?


    Сравнивать фактическое количество элементов (1, 2, 3, 4) с заявляенным в конструкторе — 4.
    /* иЗвиНите зА неРовнЫй поЧерК */
    Re: [PEG] Парсер C# 4.0
    От: para  
    Дата: 13.09.10 11:58
    Оценка:
    Здравствуйте, hardcase:

    Супер!!

    ОТЛАДКА по cs-файлу работает!!!
    МАГИЯ!!!

    Вопрос (понимаю, что не очень в тему):

    что можно сделать с поддержкой intelliSence в *.cs?
    похоже студия открывает эти файлы вне проекта, как будто бы открыт только один этот cs-файл.
    в связи с чем intelliSence, навигация и т.п. работают не очень...
    Re[2]: [PEG] Парсер C# 4.0
    От: hardcase Пират http://nemerle.org
    Дата: 13.09.10 12:20
    Оценка: 4 (1)
    Здравствуйте, para, Вы писали:

    P>Здравствуйте, hardcase:


    P>Супер!!


    P>ОТЛАДКА по cs-файлу работает!!!

    P>МАГИЯ!!!

    Дык, должна. Я локации в файлах постарался сохранить.

    P>Вопрос (понимаю, что не очень в тему):


    P>что можно сделать с поддержкой intelliSence в *.cs?

    P>похоже студия открывает эти файлы вне проекта, как будто бы открыт только один этот cs-файл.
    P>в связи с чем intelliSence, навигация и т.п. работают не очень...

    Я думаю вопрос не ко мне а к владу — студия сама разбирает эти файлы (SD поступает точно также).
    Я в ближайшее время займусь интеграцией C# парсера в компилятор.
    /* иЗвиНите зА неРовнЫй поЧерК */
    Re[2]: [PEG] Парсер C# 4.0
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 13.09.10 16:04
    Оценка:
    Здравствуйте, para, Вы писали:

    P>что можно сделать с поддержкой intelliSence в *.cs?


    Ничего. По крайней мере без хаков.

    P>похоже студия открывает эти файлы вне проекта, как будто бы открыт только один этот cs-файл.

    P>в связи с чем intelliSence, навигация и т.п. работают не очень...

    Расширение cs зарезервировано за языковым сервисом MS. Еще решапер его перехватывает (если он установлен).

    Конечно можно пытатьс поступать как решарпер, то это не просто и может привести к ужасным наложенным багам (особенно в присутсвтии решарпера).

    Более разумный способ — завести для встроенного в немерловые проекты C#-а отдельное расширение (например, cs-n) и создать (и зарегистрировать) для него собственный языковый сервис. Но это не малый объем работы.
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[3]: [PEG] Парсер C# 4.0
    От: para  
    Дата: 13.09.10 17:04
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>Более разумный способ — завести для встроенного в немерловые проекты C#-а отдельное расширение (например, cs-n) и создать (и зарегистрировать) для него собственный языковый сервис. Но это не малый объем работы.


    я тоже об этом думал, ведь от c# только синтаксис, а с метоатрибутами это уже "диалект" nemerle, т.е. компилятором CS его в общем случае не обработаешь.
    По этому логично ввести новое расширение например "ncs" и обрабатывать его, как файл немерла. и ни какого дополнительного сервиса получается не надо или я не совсем прав?
    Re[4]: [PEG] Парсер C# 4.0
    От: para  
    Дата: 13.09.10 17:13
    Оценка:
    Здравствуйте, para, Вы писали:
    P>По этому логично ввести новое расширение например "ncs"

    А можно ли писать на с# в файле .n, но в начале файла указать атрибут типа
    [TreatAsСS]
    ...

    можно ли? и в какую сторону (стадию компилятора) смотреть чтобы попробовать так сделать?
    Re[4]: [PEG] Парсер C# 4.0
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 13.09.10 17:41
    Оценка:
    Здравствуйте, para, Вы писали:

    P>По этому логично ввести новое расширение например "ncs" и обрабатывать его, как файл немерла. и ни какого дополнительного сервиса получается не надо или я не совсем прав?


    Нет не прав. Парсер и лексер важные части интеграции. Для корректной работы нужно создавать свой языковый сервис.
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[5]: [PEG] Парсер C# 4.0
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 13.09.10 17:42
    Оценка:
    Здравствуйте, para, Вы писали:

    P>А можно ли писать на с# в файле .n, но в начале файла указать атрибут типа

    P>
    P>[TreatAsСS]
    P>...
    P>

    P>можно ли? и в какую сторону (стадию компилятора) смотреть чтобы попробовать так сделать?

    Нет. Да и смысла нет.
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re: [PEG] Парсер C# 4.0
    От: IT Россия linq2db.com
    Дата: 13.09.10 17:54
    Оценка:
    Здравствуйте, hardcase, Вы писали:

    H>Парсер C#4.0, генерирующий AST, вроде как принял законченную форму к r9078. Кому интересно, может посмотреть и ужаснуться.


    Надо Хейльсбергу и Ко послать. Пусть поучаться как делать нормальный вывод типов
    Если нам не помогут, то мы тоже никого не пощадим.
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.