Транслятор PascalABC.NET <-> C#

@Admin предложил мне очень интересную идею: реализовать транслятор кодов PascalABC.NET в C# и обратно. У меня возникло несколько вопросов:

  1. Можно ли использовать существующий парсер PascalABC.NET? Имеет ли смысл писать свой?
  2. Как быть с теми конструкциями, которые не имеют зеркальной замены?
2 лайка

Надо писать свой.

Не надо реализовывать полный парсер - достаточно только самых частых конструкций

Можно чтобы даже не было полного перевода, но потом руками надо было немного поправить

2 лайка

Идея давно висит в воздухе: часто начальных навыков ЯП/NET не достаточно, чтобы самому справиться, особенно когда не знаешь, что искать. С одной стороны вроде есть примеры, но даже чтобы глянуть, нужна Студия, с другой – попадаются конвертеры с/на VB.NEТ, python и даже Java, но почему-то нет логичного расширения линейки Pascal… Непарадок!

Согласен с тем, что нужны шаблоны, а хитрое или пока не описанное лучше переносить как комментарии.

Всё понял. Буду думать.

Я много раз переводил с C# на Pascal - и всякий раз надо было быстро - всегда вручную и жалел, что тузлы, которая делала хоть 90% автоматически нет

1 лайк

Может быть, я чего-то не понимаю, но поскольку [последние полгода точно] вижу, что какие-то вещи из того же С# пытаются “приделать” к PascalABC.NЕТ, не могу взять в толк, как можно автоматически наладить перевод таких конструкций, которых тут нет?

А с другой стороны, если удастся направить энергию “улучшателей языка и ловцов woodoo-ошибок” в конструктивное русло - это будет прекрасно!

Каких например? В Паскале полно таких конструкций, которых нет в C#, но если взять и скомпилировать программу, а потом декомпилировать в C#, то проблема решается моментально.

Это было бы конечно просто, но, к примеру, yield-ы есть и в паскале и в C#, но если делать вашим способом - их превратит в класс, что не очень читабельно.

yield-ы не надо. Хотя бы простые процедуры и код

Ну, то как дополнительное задание. Хотя, кстати, раз они есть и в паскале и в C# - это не должно быть сложно.

Я посмотрел простые примеры лексеров на C# и мне кажется, что всё конвертирование можно выполнить на уровне лексем.

Нет, не думаю

А в чём Вы делали парсер?

В gppg. Но он для C# не подходит, потому что LR. Смотрите в сторону Roslyn, он генеририет семантическое дерево.

1 лайк