Свой разборщик аналога упрощённого Delphi
От: uni Россия  
Дата: 05.08.19 06:06
Оценка:
Доброго. Я недавно узнал про Nemerle (посмотрел старый доклад 2011 г Дениса Рысцова) и хотел бы уточнить по поводу возможностей технологии.
Задача такая. Существует семейство языков МЭК для промышленного программирования. Есть стандарт, являющийся "калькой" буржуйского — ГОСТ Р МЭК 61131-3-2016 (введён в действие: 01.04.2017).
В общем, там есть несколько языков. Часть из них как-бы графическая, часть текстовая. Меня интересует Delphi-подобный язык ST, который в этом новом стандарте стал поддерживать некоторые свойства ООП.
Так вот, я хотел бы иметь парсер этого языка ST с тем намерением, чтобы транслировать его выражения в другой язык (C#,C++,...).

Приведу пример. Так выглядит простая программа на ST (пусть без ООП):
PROGRAM program0
  VAR
    bFirstCycle : BOOL := true;
    t1 : TON;
  END_VAR
  VAR
    out0 AT %QX0.0 : BOOL;
    in0 AT %IX0.0 : BOOL;
  END_VAR

  if bFirstCycle then

    bFirstCycle := false;
    
  end_if;

  t1( in := not t1.q, pt := t#1s );

  if t1.q then out0 := not out0; end_if;
END_PROGRAM


CONFIGURATION config

  RESOURCE resource1 ON PLC
    TASK task0(INTERVAL := T#0.2ms,PRIORITY := 0);
    PROGRAM instance0 WITH task0 : program0;
  END_RESOURCE
END_CONFIGURATION


Я хочу транслировать блоки: PROGRAM — END_PROGRAM, VAR — END_VAR и прочие подобные в альтернативные конструкции на другом языке, чтобы потом собрать получившийся код доступным компилятором для целевой платформы. Эта технология называется SoftPLC, т.е. таким образом мы получаем программный промышленный контроллер.

Добавлю, что существует утилита с традиционным подходом, решающая эту задачу: matiec. Только там C-код на выходе. Существует также готовая полурабочая IDE Beremiz, которая делает подобное совместно с matiec. Меня не устраивает эта связка (как-то убого). Примеры, которые я увидел в докладе Дениса Рысцова, мне понравились. Они гораздо проще. Я хотел пойти обычным путём грамматик и изучения matiec компилятора, но это, видимо, гораздо сложнее, чем разбор, который я видел на примере Nemerle.Peg.

Вопрос: Есть ли какой-нибудь учебник или примеры, на которых я мог бы потренироваться? Откуда брать информацию по практическому применению? Может быть уже кто-то разбирал Delphi или Pascal и можно посмотреть как это сделано? Правильно ли я вообще понимаю возможности инструмента? Т.е. можно ли на его основе сделать транслятор на другой язык? Например: ООП Паскаль в C++. При разумных ограничениях.

В идеале мне хотелось бы разобрать все МЭК языки и добавить кое-чего своего.
Отредактировано 05.08.2019 6:18 uni . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.