Здравствуйте, IT, Вы писали:
H>>Парсер C#4.0, генерирующий AST, вроде как принял законченную форму к r9078. Кому интересно, может посмотреть и ужаснуться.
IT>Надо Хейльсбергу и Ко послать. Пусть поучаться как делать нормальный вывод типов
Он же дизайнер! Ему такие мелочи не интересны .
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, hardcase, Вы писали:
VD>>goto case и goto default можно было бы и реализовать. Какие с ними проблемы? H>Я не знаю как их обработать.
Вообще полезные вещи, goto эти. Может, компилировать свитч не просто в матч, а в матч+tail call, соответственно, goto будет просто вызовом ф-ции, который будет компилятором Немерле "обратно" превращаться в тот же goto?
Вернее, сделать так — если внутри матча есть goto компилировать так, если нет, то обычный матч.
Здравствуйте, Воронков Василий, Вы писали:
ВВ>Здравствуйте, hardcase, Вы писали:
VD>>>goto case и goto default можно было бы и реализовать. Какие с ними проблемы? H>>Я не знаю как их обработать.
ВВ>Вообще полезные вещи, goto эти. Может, компилировать свитч не просто в матч, а в матч+tail call, соответственно, goto будет просто вызовом ф-ции, который будет компилятором Немерле "обратно" превращаться в тот же goto?
Goto в Nemerle есть, это TExpr.Goto и использовать его в Match в принципе можно, но проблема в том, прежде придется типизировать вхождения матча, на которые осуществляются переходы.
Здравствуйте, Аноним, Вы писали:
А>пока не понял зачем это все надо
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) перегенерированный код по моему опыту обычно бывает корявым. Упадет существенно скорость компиляции.
Здравствуйте, Аноним, Вы писали:
А>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.
Извините, тогда вопрос снят. Я вас не правильно понял.
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, hardcase, Вы писали:
H>>Здравствуйте, Аноним, Вы писали:
А>>>2) перегенерированный код по моему опыту обычно бывает корявым. Упадет существенно скорость компиляции.
H>>В каком смысле перегенерированый? Если вы решили что *.cs транслируется в *.n то вы заблуждаетесь: парсер встраивается в компилятор и AST C# преобразовывается в AST Nemerle с ограничениями, которые я перечислил в начале топика. На выходе имеем исполняемый код аналогичный тому, что получается при компиляции *.n.
А>Извините, тогда вопрос снят. Я вас не правильно понял.
Здравствуйте, hardcase, Вы писали:
H>В каком смысле перегенерированый? Если вы решили что *.cs транслируется в *.n то вы заблуждаетесь: парсер встраивается в компилятор и AST C# преобразовывается в AST Nemerle с ограничениями, которые я перечислил в начале топика. На выходе имеем исполняемый код аналогичный тому, что получается при компиляции *.n.
Кстати о птичках.
Хорошо бы разбирать весь синтаксис C# включая goto и unsafe.
Но при трансформации AST сообщать что эти конструкции не поддерживаются.
Тем более что со временем их можно будет и реализовать в основном компиляторе.
А пока хоть сообщение об ошибке будет предельно ясным.
Что касается препроцессора то тут нужна поддержка со стороны генератора парсеров. Я думаю над тем как ее сделать.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, hardcase, Вы писали:
H>>В каком смысле перегенерированый? Если вы решили что *.cs транслируется в *.n то вы заблуждаетесь: парсер встраивается в компилятор и AST C# преобразовывается в AST Nemerle с ограничениями, которые я перечислил в начале топика. На выходе имеем исполняемый код аналогичный тому, что получается при компиляции *.n. WH>Кстати о птичках. WH>Хорошо бы разбирать весь синтаксис C# включая goto и unsafe. WH>Но при трансформации AST сообщать что эти конструкции не поддерживаются. WH>Тем более что со временем их можно будет и реализовать в основном компиляторе. WH>А пока хоть сообщение об ошибке будет предельно ясным.
Так оно и происходит.
WH>Что касается препроцессора то тут нужна поддержка со стороны генератора парсеров. Я думаю над тем как ее сделать.
Здравствуйте, 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) А. Эйнштейн
Здравствуйте, hardcase, Вы писали:
H>1) генератор парсеров с помощью которого был реализован парсер C# станет ключевым звеном в новой системе макросов, этот проект — полигон для его обкатки H>2) теперь можно будет использовать стандартные дизайнеры и кодогенераторы VisualStudio и других инструментов, порождающих код на C#, и не тратить время на разработку и поддержку своих.
3) можно будет плавно преобразовывать C#-проекты в немерловые.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, hardcase, Вы писали:
WH>>>Хорошо бы разбирать весь синтаксис C# включая goto и unsafe. WH>>>Но при трансформации AST сообщать что эти конструкции не поддерживаются. WH>>>Тем более что со временем их можно будет и реализовать в основном компиляторе. WH>>>А пока хоть сообщение об ошибке будет предельно ясным. H>>Так оно и происходит. WH>Что-то не заметно. WH>Вот это например не парсит WH>
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, hardcase, Вы писали:
WH>>>Хорошо бы разбирать весь синтаксис C# включая goto и unsafe. WH>>>Но при трансформации AST сообщать что эти конструкции не поддерживаются. WH>>>Тем более что со временем их можно будет и реализовать в основном компиляторе. WH>>>А пока хоть сообщение об ошибке будет предельно ясным. H>>Так оно и происходит. WH>Что-то не заметно. WH>Вот это например не парсит WH>
Здравствуйте, WolfHound, Вы писали:
WH>Хорошо бы разбирать весь синтаксис C# включая goto и unsafe.
Дык он и разбирает. Только в немерл перевести, по понятным причинам, не может.
WH>Но при трансформации AST сообщать что эти конструкции не поддерживаются.
Так и происходит.
WH>Тем более что со временем их можно будет и реализовать в основном компиляторе.
Ну, goto и так можно реализовать. На уровне типизированного дерева он поддерживается.
С unsafe сложнее. Да и не нужно оно на практике. Долболомов что пишут unsafe-код очень мало. Тех кто использует unsafe по делу вообще почти нет (разве что ли создатели Сингулярити).
WH>Что касается препроцессора то тут нужна поддержка со стороны генератора парсеров. Я думаю над тем как ее сделать.
Да не особо оно и нужно. Прпероцессор можно сделать отдельным парсером или даже вручную. Там все очень просто и примитивно.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, hardcase, Вы писали:
H>Проверил. Парсит. AST корректное. Может ты не обновил парсер? Я не так давно там несколько ошибок исправил.
Я каждый день обновляюсь и компилятор пересобираю.
Сейчас еще раз обновился. Что-то смержилось и теперь дейстительно парсит.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, hardcase, Вы писали:
H>В каком смысле перегенерированый? Если вы решили что *.cs транслируется в *.n то вы заблуждаетесь: парсер встраивается в компилятор и AST C# преобразовывается в AST Nemerle с ограничениями, которые я перечислил в начале топика. На выходе имеем исполняемый код аналогичный тому, что получается при компиляции *.n.
А overload resolution и вывод типов в лямбдах/generic методах по правилам C# или Nemerle происходит?
Здравствуйте, nikov, Вы писали:
N>А overload resolution и вывод типов в лямбдах/generic методах по правилам C# или Nemerle происходит?
Это просто танслятор из АСТ-а шарпа в АСТ немерла. Так что вся семантика немерловая, ну, за исключением тех случаев когда ее специально напильником доводили (например, для оператора ++).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.