Re[2]: [PEG] Парсер C# 4.0
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.09.10 19:51
Оценка: :)
Здравствуйте, IT, Вы писали:

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


IT>Надо Хейльсбергу и Ко послать. Пусть поучаться как делать нормальный вывод типов


Он же дизайнер! Ему такие мелочи не интересны .
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: [PEG] Парсер C# 4.0
От: Воронков Василий Россия  
Дата: 24.09.10 06:25
Оценка:
Здравствуйте, hardcase, Вы писали:

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

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

Вообще полезные вещи, goto эти. Может, компилировать свитч не просто в матч, а в матч+tail call, соответственно, goto будет просто вызовом ф-ции, который будет компилятором Немерле "обратно" превращаться в тот же goto?

Вернее, сделать так — если внутри матча есть goto компилировать так, если нет, то обычный матч.
Re[5]: [PEG] Парсер C# 4.0
От: hardcase Пират http://nemerle.org
Дата: 24.09.10 06:42
Оценка: 7 (1)
Здравствуйте, Воронков Василий, Вы писали:

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


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

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

ВВ>Вообще полезные вещи, goto эти. Может, компилировать свитч не просто в матч, а в матч+tail call, соответственно, goto будет просто вызовом ф-ции, который будет компилятором Немерле "обратно" превращаться в тот же goto?


Goto в Nemerle есть, это TExpr.Goto и использовать его в Match в принципе можно, но проблема в том, прежде придется типизировать вхождения матча, на которые осуществляются переходы.
/* иЗвиНите зА неРовнЫй поЧерК */
Re: [PEG] Парсер C# 4.0
От: Аноним  
Дата: 04.10.10 07:45
Оценка:
пока не понял зачем это все надо
Re[2]: [PEG] Парсер C# 4.0
От: hardcase Пират http://nemerle.org
Дата: 04.10.10 08:13
Оценка:
Здравствуйте, Аноним, Вы писали:

А>пока не понял зачем это все надо


1) генератор парсеров с помощью которого был реализован парсер C# станет ключевым звеном в новой системе макросов, этот проект — полигон для его обкатки
2) теперь можно будет использовать стандартные дизайнеры и кодогенераторы VisualStudio и других инструментов, порождающих код на C#, и не тратить время на разработку и поддержку своих.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[3]: [PEG] Парсер C# 4.0
От: Аноним  
Дата: 04.10.10 08:27
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Здравствуйте, Аноним, Вы писали:


А>>пока не понял зачем это все надо


H>1) генератор парсеров с помощью которого был реализован парсер C# станет ключевым звеном в новой системе макросов, этот проект — полигон для его обкатки

H>2) теперь можно будет использовать стандартные дизайнеры и кодогенераторы VisualStudio и других инструментов, порождающих код на C#, и не тратить время на разработку и поддержку своих.

1) ясно
2) перегенерированный код по моему опыту обычно бывает корявым. Упадет существенно скорость компиляции.
Re[4]: [PEG] Парсер C# 4.0
От: hardcase Пират http://nemerle.org
Дата: 04.10.10 08:33
Оценка:
Здравствуйте, Аноним, Вы писали:

А>2) перегенерированный код по моему опыту обычно бывает корявым. Упадет существенно скорость компиляции.


В каком смысле перегенерированый? Если вы решили что *.cs транслируется в *.n то вы заблуждаетесь: парсер встраивается в компилятор и AST C# преобразовывается в AST Nemerle с ограничениями, которые я перечислил в начале топика. На выходе имеем исполняемый код аналогичный тому, что получается при компиляции *.n.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[5]: [PEG] Парсер C# 4.0
От: Аноним  
Дата: 04.10.10 08:35
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Здравствуйте, Аноним, Вы писали:


А>>2) перегенерированный код по моему опыту обычно бывает корявым. Упадет существенно скорость компиляции.


H>В каком смысле перегенерированый? Если вы решили что *.cs транслируется в *.n то вы заблуждаетесь: парсер встраивается в компилятор и AST C# преобразовывается в AST Nemerle с ограничениями, которые я перечислил в начале топика. На выходе имеем исполняемый код аналогичный тому, что получается при компиляции *.n.


Извините, тогда вопрос снят. Я вас не правильно понял.
Re[6]: [PEG] Парсер C# 4.0
От: hardcase Пират http://nemerle.org
Дата: 04.10.10 08:45
Оценка: +1
Здравствуйте, Аноним, Вы писали:

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


H>>Здравствуйте, Аноним, Вы писали:


А>>>2) перегенерированный код по моему опыту обычно бывает корявым. Упадет существенно скорость компиляции.


H>>В каком смысле перегенерированый? Если вы решили что *.cs транслируется в *.n то вы заблуждаетесь: парсер встраивается в компилятор и AST C# преобразовывается в AST Nemerle с ограничениями, которые я перечислил в начале топика. На выходе имеем исполняемый код аналогичный тому, что получается при компиляции *.n.


А>Извините, тогда вопрос снят. Я вас не правильно понял.


Вообще задача честного конвертера исходников есть и она открыта
Автор: VladD2
Дата: 13.09.10
.
Фактически нужно AST Nemerle, полученное от конвертера, просто перенаправить в файл. И будет новый качественный cs2n.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[5]: [PEG] Парсер C# 4.0
От: WolfHound  
Дата: 04.10.10 09:45
Оценка:
Здравствуйте, hardcase, Вы писали:

H>В каком смысле перегенерированый? Если вы решили что *.cs транслируется в *.n то вы заблуждаетесь: парсер встраивается в компилятор и AST C# преобразовывается в AST Nemerle с ограничениями, которые я перечислил в начале топика. На выходе имеем исполняемый код аналогичный тому, что получается при компиляции *.n.

Кстати о птичках.
Хорошо бы разбирать весь синтаксис C# включая goto и unsafe.
Но при трансформации AST сообщать что эти конструкции не поддерживаются.
Тем более что со временем их можно будет и реализовать в основном компиляторе.
А пока хоть сообщение об ошибке будет предельно ясным.

Что касается препроцессора то тут нужна поддержка со стороны генератора парсеров. Я думаю над тем как ее сделать.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[6]: [PEG] Парсер C# 4.0
От: hardcase Пират http://nemerle.org
Дата: 04.10.10 16:21
Оценка:
Здравствуйте, WolfHound, Вы писали:

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


H>>В каком смысле перегенерированый? Если вы решили что *.cs транслируется в *.n то вы заблуждаетесь: парсер встраивается в компилятор и AST C# преобразовывается в AST Nemerle с ограничениями, которые я перечислил в начале топика. На выходе имеем исполняемый код аналогичный тому, что получается при компиляции *.n.

WH>Кстати о птичках.
WH>Хорошо бы разбирать весь синтаксис C# включая goto и unsafe.
WH>Но при трансформации AST сообщать что эти конструкции не поддерживаются.
WH>Тем более что со временем их можно будет и реализовать в основном компиляторе.
WH>А пока хоть сообщение об ошибке будет предельно ясным.

Так оно и происходит.

WH>Что касается препроцессора то тут нужна поддержка со стороны генератора парсеров. Я думаю над тем как ее сделать.


Ок. Буду ждать
/* иЗвиНите зА неРовнЫй поЧерК */
Re[7]: [PEG] Парсер C# 4.0
От: WolfHound  
Дата: 04.10.10 17:45
Оценка: 10 (1)
Здравствуйте, hardcase, Вы писали:

WH>>Хорошо бы разбирать весь синтаксис C# включая goto и unsafe.

WH>>Но при трансформации AST сообщать что эти конструкции не поддерживаются.
WH>>Тем более что со временем их можно будет и реализовать в основном компиляторе.
WH>>А пока хоть сообщение об ошибке будет предельно ясным.
H>Так оно и происходит.
Что-то не заметно.
Вот это например не парсит
            public override void PutBytes (byte [] dest, int destIdx, long value)
            {
                Check (dest, destIdx, 8);
                fixed (byte *target = &dest [destIdx]){
                    long *source = (long *) &value;

                    *((long*)target) = *source;
                }
            }
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[3]: [PEG] Парсер C# 4.0
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.10.10 18:24
Оценка:
Здравствуйте, hardcase, Вы писали:

H>1) генератор парсеров с помощью которого был реализован парсер C# станет ключевым звеном в новой системе макросов, этот проект — полигон для его обкатки

H>2) теперь можно будет использовать стандартные дизайнеры и кодогенераторы VisualStudio и других инструментов, порождающих код на C#, и не тратить время на разработку и поддержку своих.

3) можно будет плавно преобразовывать C#-проекты в немерловые.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: [PEG] Парсер C# 4.0
От: hardcase Пират http://nemerle.org
Дата: 04.10.10 18:46
Оценка:
Здравствуйте, WolfHound, Вы писали:

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


WH>>>Хорошо бы разбирать весь синтаксис C# включая goto и unsafe.

WH>>>Но при трансформации AST сообщать что эти конструкции не поддерживаются.
WH>>>Тем более что со временем их можно будет и реализовать в основном компиляторе.
WH>>>А пока хоть сообщение об ошибке будет предельно ясным.
H>>Так оно и происходит.
WH>Что-то не заметно.
WH>Вот это например не парсит
WH>
WH>            public override void PutBytes (byte [] dest, int destIdx, long value)
WH>            {
WH>                Check (dest, destIdx, 8);
WH>                fixed (byte *target = &dest [destIdx]){
WH>                    long *source = (long *) &value;

WH>                    *((long*)target) = *source;
WH>                }
WH>            }

WH>


Дык, я на unsafe строго не тестировал. За тест-кейз спасибо, буду отлаживать.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[8]: [PEG] Парсер C# 4.0
От: hardcase Пират http://nemerle.org
Дата: 04.10.10 19:04
Оценка:
Здравствуйте, WolfHound, Вы писали:

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


WH>>>Хорошо бы разбирать весь синтаксис C# включая goto и unsafe.

WH>>>Но при трансформации AST сообщать что эти конструкции не поддерживаются.
WH>>>Тем более что со временем их можно будет и реализовать в основном компиляторе.
WH>>>А пока хоть сообщение об ошибке будет предельно ясным.
H>>Так оно и происходит.
WH>Что-то не заметно.
WH>Вот это например не парсит
WH>
WH>            public override void PutBytes (byte [] dest, int destIdx, long value)
WH>            {
WH>                Check (dest, destIdx, 8);
WH>                fixed (byte *target = &dest [destIdx]){
WH>                    long *source = (long *) &value;

WH>                    *((long*)target) = *source;
WH>                }
WH>            }

WH>


Проверил. Парсит. AST корректное. Может ты не обновил парсер? Я не так давно там несколько ошибок исправил.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[6]: [PEG] Парсер C# 4.0
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.10.10 19:15
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Хорошо бы разбирать весь синтаксис C# включая goto и unsafe.


Дык он и разбирает. Только в немерл перевести, по понятным причинам, не может.

WH>Но при трансформации AST сообщать что эти конструкции не поддерживаются.


Так и происходит.

WH>Тем более что со временем их можно будет и реализовать в основном компиляторе.


Ну, goto и так можно реализовать. На уровне типизированного дерева он поддерживается.

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

WH>Что касается препроцессора то тут нужна поддержка со стороны генератора парсеров. Я думаю над тем как ее сделать.


Да не особо оно и нужно. Прпероцессор можно сделать отдельным парсером или даже вручную. Там все очень просто и примитивно.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: [PEG] Парсер C# 4.0
От: WolfHound  
Дата: 04.10.10 19:52
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Проверил. Парсит. AST корректное. Может ты не обновил парсер? Я не так давно там несколько ошибок исправил.

Я каждый день обновляюсь и компилятор пересобираю.
Сейчас еще раз обновился. Что-то смержилось и теперь дейстительно парсит.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[5]: [PEG] Парсер C# 4.0
От: nikov США http://www.linkedin.com/in/nikov
Дата: 02.11.10 16:02
Оценка:
Здравствуйте, hardcase, Вы писали:

H>В каком смысле перегенерированый? Если вы решили что *.cs транслируется в *.n то вы заблуждаетесь: парсер встраивается в компилятор и AST C# преобразовывается в AST Nemerle с ограничениями, которые я перечислил в начале топика. На выходе имеем исполняемый код аналогичный тому, что получается при компиляции *.n.


А overload resolution и вывод типов в лямбдах/generic методах по правилам C# или Nemerle происходит?
Re[6]: [PEG] Парсер C# 4.0
От: hardcase Пират http://nemerle.org
Дата: 02.11.10 17:27
Оценка:
Здравствуйте, nikov, Вы писали:

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


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

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


Это просто танслятор из АСТ-а шарпа в АСТ немерла. Так что вся семантика немерловая, ну, за исключением тех случаев когда ее специально напильником доводили (например, для оператора ++).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.