Здравствуйте, hardcase, Вы писали:
H>Парсер C#4.0, генерирующий AST, вроде как принял законченную форму к r9078. Кому интересно, может посмотреть и ужаснуться.
Парсер пристыкован к компилятору в r9249.
С помощью SharpDevelop теперь возможно создавать Windows-формы на C# и компилировать их ncc.
Внимание: судя по тестам (csparser) на достаточно больших исходных текстах (SharpDevelop IDE, Janus, RServer, SharedSource CLR Implementation) в парсере нехаватет лишь поддержки директив препроцессора, в остальном он способен разбирать корректные исходные тексты на C#.
Здравствуйте, hardcase, Вы писали:
H>Внимание: судя по тестам (csparser) на достаточно больших исходных текстах (SharpDevelop IDE, Janus, RServer, SharedSource CLR Implementation) в парсере нехаватет лишь поддержки директив препроцессора, в остальном он способен разбирать корректные исходные тексты на C#.
Давно пора реализовать обработку препроцессора. Там дел-то на пару часов.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Давно пора реализовать обработку препроцессора. Там дел-то на пару часов.
Просто там только если делать в два прохода.
Ибо код C# код препроцессора фактически два разных языка переплетающихся в одном файле.
Если же делать в один проход то нужно что-то изобретать.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, WolfHound, Вы писали:
VD>>Давно пора реализовать обработку препроцессора. Там дел-то на пару часов. WH>Просто там только если делать в два прохода. WH>Ибо код C# код препроцессора фактически два разных языка переплетающихся в одном файле. WH>Если же делать в один проход то нужно что-то изобретать.
Препроцессор настолько примитивен, что его даже руками можно реализовать.
В немерловом лексере он сделан в один проход. Но можно и в два. На это времени почти не уйдет.
ЗЫ
Кстати, для разбора этого дела средствами парсера можно было бы задействовать те самые точки расширения.
В теле #if-а можно было бы менять точку расширения в правиле парсинга пробелов в зависимости от значения выражения #if-а.
Если оно вычисляется в TRUE, в точку расширения запихивать правило которое пропускает все до следующего #endif или #else. Если выражение вычисляется в FALSE, то подставлять обычное правило пропуска пробелов.
При этом останется только корректно среагировать на #endif того #if-а кондишон которого вычислился в FALSE.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, AngeL B., Вы писали:
AB>эээээ, то есть я правильно понимаю, что компилятор ncc теперь умеет компилировать сразу два языка в зависимости от расширения в рамках одного проекта?
Yep.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, AngeL B., Вы писали:
AB>эээээ, то есть я правильно понимаю, что компилятор ncc теперь умеет компилировать сразу два языка в зависимости от расширения в рамках одного проекта?
Да. Но второй язык поддерживается не на 100%.
Во-первых, пока что не поддерживается препроцессор. Но это скоро устраним.
Во-вторых, не все возможности C# 4.0 поддерживаются полностью.
В-третьих, это не совсем C#. Синтаксис поддерживается на 100%, а вот семантика — нет. Фактически — это автоматический конвертер из C# 4.0 в Nemerle, так что в тех случаях когда семантика (поведение) немерла отличается от шарповской, компилируемый код будет вести себя не так как C# 4.0, а как Nemerle. Простейший пример — работа с лямбдами. В отличии от шарпа в немреле есть функциональный тип, так что код вроде:
var f = x => x * x;
WriteLine(f(3));
Будет некорректен с точки зрения шарпа, но корректно с точки зрения немерла, так что оно пройдет компиляцию.
Кроме того будет работать вывод типов немерла.
В основном Немерл расширяет семантику шарпа, так что в большинстве случаев код будет компилироваться, но иногда может встретиться и несоответствие. Надеюсь, что таких случаев будет не много, так как в основном они сводятся к тому, что известно под названием "Этюды Никова" .
Так что можно подключать к проекту немерла имеющиеся исходники на C# и развивать их уже на немреле.
Работают даже partial-классы. Так что можно иметь часть класса на Nemerle, а часть на C#.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, hardcase, Вы писали:
VD>>Работают даже partial-классы. Так что можно иметь часть класса на Nemerle, а часть на C#.
H>Кстати тут и отличие. Ncc потребует указать для всех частей одинаковые модификаторы доступа.
А шарп нет?
Ну, это уже мелочи, думаю... Таких отличий может быть много.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, hardcase, Вы писали:
H>>Только что замечено: автокомплит SharpDevelop в *.cs файлах подсасывает информацию, полученную из *.n файлов.
VD>Чё? Я не представляю как такое возможно.
Видимо всему виной Class View. SD поддерживает его автоматически:
Здравствуйте, hardcase, Вы писали:
H>Здравствуйте, hardcase, Вы писали:
H>>Парсер C#4.0, генерирующий AST, вроде как принял законченную форму к r9078. Кому интересно, может посмотреть и ужаснуться.
Теперь посмотреть можно проще: добавил парсер C# в секцию "PowerPack" инсталлятора.
Здравствуйте, hardcase, Вы писали:
H>Заставил компилировться XAML-разметку. H>Для этого пришлось сделать очень смешную вещь в Nemerle.MSBuild.targets:
H>
Здравствуйте, hardcase, Вы писали:
H>Заставил компилировться XAML-разметку. H>Для этого пришлось сделать очень смешную вещь в Nemerle.MSBuild.targets:
H>
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, hardcase, Вы писали:
H>>Заставил компилировться XAML-разметку. H>>Для этого пришлось сделать очень смешную вещь в Nemerle.MSBuild.targets:
H>>
Ну, этот хак я сделал у себя локально, ради теста.
Я эти свойства используются для компиляции XAML файлов, возможно файлы моделей EntityFramework также их используют.
Студию не проверял, а SharpDevelop-ный дизайнер виндовсформс на эту настройку точно не смотрит (только на xxx.Designer.cs).
В студии визуальный дизайнер WPF не загружается — жалуется что Немерловая интеграция ему null где-то вертает, но XAML редактировать позволяет. В SharpDevelop визуального дизайнера нет.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, AngeL B., Вы писали:
AB>>эээээ, то есть я правильно понимаю, что компилятор ncc теперь умеет компилировать сразу два языка в зависимости от расширения в рамках одного проекта?
VD>Да.
а как на практике эту фичу заюзать??? Простого добавления файла *.cs в проэкт недостаточно.