Re[6]: [PEG] Парсер C# 4.0
От: VladD2 Российская Империя www.nemerle.org
Дата: 03.11.10 03:50
Оценка:
Здравствуйте, nikov, Вы писали:

N>А overload resolution и вывод типов в лямбдах/generic методах по правилам C# или Nemerle происходит?


Да... Только одна поправка! Сам парсер тупо генерирует АСТ. Никаких выводов типов или разрешения перегрузки он не делает (это же парсер!). Так что когда мы говорим о семантике, то речь идет уже об созданном на базе этого парсера конверторе. Но парсер можно использовать и отдельно.

Судя по вот этому замечанию, наша реализация оказалась примерно в 10 раз быстрее АНТЛР-овской. И это не смотря на то, что у нас тупой PEG, а в АНТЛР-е конечные автоматы!
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: [PEG] Парсер C# 4.0
От: matumba  
Дата: 10.11.10 10:54
Оценка:
Здравствуйте, hardcase, Вы писали:

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


А существует конвертер С#->Nemerle? Натыкался на упоминание об утилитке cs2n, но бинарника в дистре не нашёл. Вот на этом парсере кто-то делает что-нибудь подобное?
Re[2]: [PEG] Парсер C# 4.0
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.11.10 15:28
Оценка:
Здравствуйте, matumba, Вы писали:

M>А существует конвертер С#->Nemerle? Натыкался на упоминание об утилитке cs2n, но бинарника в дистре не нашёл. Вот на этом парсере кто-то делает что-нибудь подобное?


Было такое дело в старых версиях (9.3). Но оно давно устарело. Шарп там чуть ли не 1.0 поддерживался. Так что на сегодня оно интереса не предсавляет.

В принципе, на базе современного парсера сделать такую утилиту будет не сложно. Вот только рук не хватает.

Вот можешь помочь проекту, смастерить такую утилиту. Что делать подскажем.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: [PEG] Парсер C# 4.0
От: matumba  
Дата: 10.11.10 20:18
Оценка:
Здравствуйте, VladD2, Вы писали:

M>>А существует конвертер С#->Nemerle?

VD>В принципе, на базе современного парсера сделать такую утилиту будет не сложно. Вот только рук не хватает.
VD>Вот можешь помочь проекту, смастерить такую утилиту. Что делать подскажем.

Написать скорее всего могу, но я же цэшарповод, Немерле знаю на уровне "Хелл о, ворлд!" Писать лучше на Немерле, я правильно понимаю?
Последний билд у меня поставлен, но стоит только студия 2010. Если я ПОСЛЕ Немерли поставлю студию 2008 (isolated shell), она его подхватит?
(и кстати про шелл — он встанет без оригинальной студии 2008?)
Времени особо много нет, но вечерами могу ваять.
Re[4]: [PEG] Парсер C# 4.0
От: hardcase Пират http://nemerle.org
Дата: 10.11.10 21:39
Оценка:
Здравствуйте, matumba, Вы писали:

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


M>>>А существует конвертер С#->Nemerle?

VD>>В принципе, на базе современного парсера сделать такую утилиту будет не сложно. Вот только рук не хватает.
VD>>Вот можешь помочь проекту, смастерить такую утилиту. Что делать подскажем.

M>Писать лучше на Немерле, я правильно понимаю?


Правильно.

M>Если я ПОСЛЕ Немерли поставлю студию 2008 (isolated shell), она его подхватит?


Насколько мне известно нет.

M>(и кстати про шелл — он встанет без оригинальной студии 2008?)


На то он и шелл — установится без проблем.

M>Времени особо много нет, но вечерами могу ваять.


Там дел не слишком много — вручную придется юзинги и пространства имен писать, остальное (декларации и выражения) Немерл сам умеет писать.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[4]: [PEG] Парсер C# 4.0
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.11.10 21:44
Оценка:
Здравствуйте, matumba, Вы писали:

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


M>>>А существует конвертер С#->Nemerle?

VD>>В принципе, на базе современного парсера сделать такую утилиту будет не сложно. Вот только рук не хватает.
VD>>Вот можешь помочь проекту, смастерить такую утилиту. Что делать подскажем.

M>Написать скорее всего могу, но я же цэшарповод, Немерле знаю на уровне "Хелл о, ворлд!"


Ну, вот за одно и подучишь. Тем более, что задача не сложная совсем, если не брать в расчет необходимость причесывания PrettyPrint-а для немерлового АСТ (сейчас он не очень качественно работает).

M> Писать лучше на Немерле, я правильно понимаю?


Естественно.

M>Последний билд у меня поставлен, но стоит только студия 2010. Если я ПОСЛЕ Немерли поставлю студию 2008 (isolated shell), она его подхватит?


Подхватит. Хотя, конечно, лучше было бы иметь полноценную VS 2008 SP1 + VS SDK 1.1 и немрел собранный с исходников.

M>(и кстати про шелл — он встанет без оригинальной студии 2008?)


Да.

M>Времени особо много нет, но вечерами могу ваять.


Там не так много работы.
Все что нужно находится в солюшене:
http://code.google.com/p/nemerle/source/browse/nemerle/trunk/snippets/peg-parser/CSharp/CSharpParser.sln
По сути все что нужно сделать:
1. Получить шарповский код. Тут есть варианты. По уму входом может быть фалы или клипборд. Клипбордную версию можно вставить прямо в Интеграцию.
2. С помощью парсера шарпа распарсить шарповский код.
3. С помощью конвертера преобразуем АСТ шарпа в АСТ немерла.
4. Вызываем PrettyPrint (или даже просто ToString()) для генерации кода по немерловому АСТ.
5. Записываем результат в файл или клипборд.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: [PEG] Парсер C# 4.0
От: hardcase Пират http://nemerle.org
Дата: 10.11.10 21:52
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Там не так много работы.


Еще добавлю, что для работы AstConverter'а (штуки которая преобразует C#-овый AST в Немерловый) необходим ManagerClass — это собственно сам компилятор.
Вот его придется в новом cs2n хостить.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[4]: [PEG] Парсер C# 4.0
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.11.10 22:20
Оценка:
Здравствуйте, matumba, Вы писали:

M>Последний билд у меня поставлен, но стоит только студия 2010. Если я ПОСЛЕ Немерли поставлю студию 2008 (isolated shell), она его подхватит?


Тут я гоню. Если поставить "isolated shell", то немерл надо будет переставить.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: [PEG] Парсер C# 4.0
От: enCobalt  
Дата: 10.11.10 23:14
Оценка:
ВВ>матч+tail call, соответственно, goto будет просто вызовом ф-ции, который будет компилятором Немерле "обратно" превращаться в тот же goto?
ВВ>Вернее, сделать так — если внутри матча есть goto компилировать так, если нет, то обычный матч.

А реверс инжиниринг? Т.е. компилятор немерла генерит код, который не сможет при реверсе стать немерлом?
Хочу инвайт на хабру :)
Re[7]: [PEG] Парсер C# 4.0
От: enCobalt  
Дата: 10.11.10 23:31
Оценка:
VD>С unsafe сложнее. Да и не нужно оно на практике. Долболомов что пишут unsafe-код очень мало. Тех кто использует unsafe по делу вообще почти нет (разве что ли создатели Сингулярити).

На практике встречал в работе с железом. Там сплошь и рядом этажерки указателей на помойки со структурами и указателями в которых указатели на массивы. Новейшее китайское железо с ихним же апи (железо в смысле промышленное которое на шине RS485). Хорошо когда массив с получаемыми данными можно сразу fixed и GC просто понервирничает, а бывает где все совсем плохо, что умножается на в принципе сложную тему invoke/interop... ну вы поняли. Кто умнее пишут в неуправляемых плюсах либу-прокладку, но большинство не парится — unsafe.
Хочу инвайт на хабру :)
Re[8]: [PEG] Парсер C# 4.0
От: enCobalt  
Дата: 10.11.10 23:39
Оценка:
Так вот сама тема указателей и unsafe выливается в сложные fixed, MarshallAs, invoke/interop. Надо ли оно по настоящему высокому языку? Я думаю не стоит заморачиваться. Кому надо тот все-таки в плюсах прокладку сделает. А кто не умеет, тому лучше сначала плюсы учить, и рано ему высоким языком пользоваться, "тут вам не web".
Хочу инвайт на хабру :)
Re[9]: [PEG] Парсер C# 4.0
От: enCobalt  
Дата: 10.11.10 23:48
Оценка:
[личное, накопилось] А цирк неуправляемого зоопарка стрингов-чаров меня уже вообще бесит! И он воняет!
Хочу инвайт на хабру :)
Re[5]: [PEG] Парсер C# 4.0
От: enCobalt  
Дата: 10.11.10 23:58
Оценка:
H>Там дел не слишком много — вручную придется юзинги и пространства имен писать, остальное (декларации и выражения) Немерл сам умеет писать.

Это по хорощему счету разбирать сорец по честному, например есди вдруг там уже есть юзинги?
Хочу инвайт на хабру :)
Re[8]: [PEG] Парсер C# 4.0
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.11.10 07:42
Оценка:
Здравствуйте, enCobalt, Вы писали:

VD>>С unsafe сложнее. Да и не нужно оно на практике. Долболомов что пишут unsafe-код очень мало. Тех кто использует unsafe по делу вообще почти нет (разве что ли создатели Сингулярити).


C>На практике встречал в работе с железом. Там сплошь и рядом этажерки указателей на помойки со структурами и указателями в которых указатели на массивы. Новейшее китайское железо с ихним же апи (железо в смысле промышленное которое на шине RS485). Хорошо когда массив с получаемыми данными можно сразу fixed и GC просто понервирничает, а бывает где все совсем плохо, что умножается на в принципе сложную тему invoke/interop... ну вы поняли. Кто умнее пишут в неуправляемых плюсах либу-прокладку, но большинство не парится — unsafe.


А что людей работающих с никоуровневыми АПИ на дотнете много?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: [PEG] Парсер C# 4.0
От: Воронков Василий Россия  
Дата: 11.11.10 07:48
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Судя по вот этому замечанию, наша реализация оказалась примерно в 10 раз быстрее АНТЛР-овской. И это не смотря на то, что у нас тупой PEG, а в АНТЛР-е конечные автоматы!


АНТЛР вообще как-то не быстр. Пытался я его использовать, но в итоге отказался. Если хочется бенчей, то имеет смысл с Кокором сравнить.
Re[8]: [PEG] Парсер C# 4.0
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.11.10 08:05
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>АНТЛР вообще как-то не быстр. Пытался я его использовать, но в итоге отказался.


Я от вас это в первый раз слышу.

ВВ>Если хочется бенчей, то имеет смысл с Кокором сравнить.


Хочу. Коку я сам использовал и у меня сложилось хорошее впечатление о его производительности. Так что сравнение с ним было бы очень интересно.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: [PEG] Парсер C# 4.0
От: Воронков Василий Россия  
Дата: 11.11.10 09:02
Оценка:
Здравствуйте, VladD2, Вы писали:

ВВ>>Если хочется бенчей, то имеет смысл с Кокором сравнить.

VD>Хочу. Коку я сам использовал и у меня сложилось хорошее впечатление о его производительности. Так что сравнение с ним было бы очень интересно.

Тест сделать в принципе несложно. В качестве основы со стороны Кокора можно взять грамматику C# 3.0 — от 4-й версии отличий очень мало. Она у них тут: http://www.ssw.uni-linz.ac.at/Research/Projects/Coco/CS/CSharp3.atg. У ПЕГа в свою очередь надо будет отключить семантические действия, чтобы сравнивать чисто парсинг.

Я могу собрать небольшой проектик для Кокора, переслать тебе, а ты уже запустишь тесты. Могу сделать консольку, которая в качестве первого параметра принимает путь к файле, а по завершении парсинга выводит потраченное время в мс.
Re[6]: [PEG] Парсер C# 4.0
От: hardcase Пират http://nemerle.org
Дата: 11.11.10 09:16
Оценка:
Здравствуйте, enCobalt, Вы писали:

H>>Там дел не слишком много — вручную придется юзинги и пространства имен писать, остальное (декларации и выражения) Немерл сам умеет писать.


C>Это по хорощему счету разбирать сорец по честному, например есди вдруг там уже есть юзинги?


Вы топик пробовали от начала читать?
/* иЗвиНите зА неРовнЫй поЧерК */
Re[5]: [PEG] Парсер C# 4.0
От: matumba  
Дата: 11.11.10 14:35
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Все что нужно находится в солюшене


Т.е. мне его создавать не надо, просто дописать код в солюшен, так? Уже качаю сорсы.
Re[10]: [PEG] Парсер C# 4.0
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.11.10 14:49
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Я могу собрать небольшой проектик для Кокора, переслать тебе, а ты уже запустишь тесты. Могу сделать консольку, которая в качестве первого параметра принимает путь к файле, а по завершении парсинга выводит потраченное время в мс.


Давай. Можешь и нашу реализацию подключить.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.