Сделал учебный образец транслятора с pas на CIL. Ну так быстро, конечно что-то полноценное сделать было нельзя, поэтому транслятор транслирует только объявления некоторых переменных и вызов опять же некоторых функций. Но тем не менее некие общие принципы работы компилятора на .NET можно увидеть. Ссылка
Ээ нуу… Это конечно интересно, но ведь PascalABC.Net
уже делает это, при чём полноценно. Полученный IL-код можно посмотреть любым декомпилятором для C#, я использую DotPeek.
Но вот разобраться в его исходниках могут только избранные
- и главное исходник написан не на PascalABC.Net , то есть кому надо понять общие принципы работы компиляторов должне получается учить какие-то другие языки.
C# очень похож на PascalABC.Net
, все те же принципы работают и там. Уметь писать на C# не обязательно чтоб понимать код на нём.
Но вот зато объём кода - я уже давно слежу за исправлениями багов, то есть какие правки в коде исправляют какую проблему. И всё ещё мало понимаю, так там много терминов.
Всё-таки C# и Паскаль - это разные языки. А Microsoft C# и PascalABC.Net, разные среды разработки.
-
Далеко не факт, что такой большой и объёмный проект, как компилятор может быть вообще правильно откомпилирован и доведён до exeшника в PascalABC.Net . Пока приведённые выше примеры - это достаточно небольшие программы.
-
Дайте любому школьнику без подготовки хотя бы простую программу на C#, естественно он её не сможет переписать на паскале. Поэтому примеры на C# не годятся для обучения Паскалю , по моему это очевидно.
Да, но компиляторы это и не тема которую изучают в начале)) Всё равно, если уже пишешь компилятор - должен быть какой то опыт, знание хотя бы основного синтаксиса нескольких языков, чтоб было на что ориентироваться когда свой синтаксис будешь придумывать.
А как может быть иначе?
А с чего Вы вообще решили, что он знает именно PascalABC.NET, а не Delphi или C#? Написание компилятора на PascalABC.NET как самоцель - глупость. Компилятор работать будет, но вот синтаксис языка, вероятнее всего, будет не очень. При написании проекта надо ориентироваться на ту платформу/язык, который удобен Вам, а не тот который популярен/рекомендован. Если задача стояла показать простой пример компилятора, то я Вас поздравляю, Вы отлично справились.
А можно узнать, на каком основании Вы делаете такое предположение?
Ну т.е. когда Н.Вирт реализовал свой компилятор с Паскаля на Паскале, синтаксис “был не очень”? А народ-то и не знал, только нахваливал, какой удачный получился язык…
-А что есть примеры написания на PascalABC.Net больших проектов в 10 - 20 тыс. строчек кода? Хотя бы одного? Нет, я понимаю в теории должно что работать но на практике, когда масштабные проекты создаются, могут оказаться проблемы.
-Ну я понимаю ситуацию PascalABC.Net имеет сейчас основное предназначение, как учебный язык. Следовательно есть кто-то, кто знает именно его и пока не изучил остальные.
- вот я и боюсь, что возможно даже для разработчиков их собственный проект (пока) не самая удобная платформа
- Да, конечно задача именно такая и была. И на самом деле там ещё надо приводить в приличный вид надо, чтобы не стыдно было школьникам показывать. Например, использовать процедуры , а не в один Main всё пилить + обучить программу обрабатывать “procedure”. И какой-нибудь примитивный обработчик ошибок вставить.
- вот я о том же . Вирту было удобно делать компилятор именно на своём же Паскале.
Сам Н.Вирт объясняет это иначе. На ЭВМ, с которой он работал, были компиляторы только ассемблера и Фортрана. А когда он придумывал язык, взял синтаксис от языка Алгол и несколько фортрановских идей. В сторону С он не стал даже смотреть, потому что уже тогда про синтаксис С говорили, что сначала слепили язык, а потом для него написали синтаксис.
Я имел ввиду не конкретно Паскаль. Если цель реализации проекта - сделать на конкретном языке, то основное внимание уделяется коду, а не сути проекта. Особенно, если язык не знакомый.
А какая разница? Если мы имеем универсальный алгоритмический язык, на нем можно реализовать все. А если не все, то язык не универсальный…
При чём здесь это?
При том, что можно реализовать язык любой сложности и с любым синтаксисом. Поэтому Ваше “синтаксис не очень” - ну, я не могу понять причины такого заявления.
- насколько я помню Паскаль был создан в 1969 году, а C в 1973 , так что Вирт не мог писать компилятор Паскаля на Си, даже если бы захотел.
Повторяю в n+1 раз. Если проект делается на конкретном языке (т.е. цель - не сам проект, а его язык), то внимание будет больше привлечено кодом, чем содержанием.
Sun_Serega -ага, спасибо, исправил.