112 lines
3.4 KiB
Typst
112 lines
3.4 KiB
Typst
#import "@preview/diagraph:0.3.6": render, raw-render
|
||
|
||
== "Дорожная карта" (план развития) языка plcc
|
||
|
||
=== Ограничения, накладываемые на разработку языка
|
||
|
||
В основе языка plcc предусмотрены принципы и ограничения:
|
||
|
||
1. Выполнения в условиях реального времени.
|
||
|
||
2. Принципах продвинутого статического анализа кода, в частности...
|
||
|
||
3. контент-адресуемости (если формулы эквивалентны, то считаются равными; возможно отслеживание изменений на уровне абстрактного синтаксического дерева)
|
||
|
||
4. Ориентации на исполнение на ПЛК.
|
||
|
||
5. Ориентации на возможность распределенного исполнения программ.
|
||
|
||
=== Перспективы
|
||
|
||
1. Поддержка распределенного исполнения
|
||
|
||
2. Поддержка трехзначной и Null Convention логики
|
||
|
||
3. "Стимулирование" использования чистых функций вместо функциональных блоков, сокращение количества внутренних переменных
|
||
|
||
== Пример АСД
|
||
|
||
=== Пример построения полной формы АСД языка plcc
|
||
|
||
Полная форма АСД включает в себя управляющие узлы и примитивные функции:
|
||
|
||
|
||
#render("
|
||
digraph {
|
||
none -> C0
|
||
C0 -> sin
|
||
C0 -> C1
|
||
C1 -> \"+\";
|
||
C1 -> ┴;
|
||
┴ -> C2
|
||
C2 -> cos;
|
||
C2 -> x1;
|
||
┴ -> C3
|
||
C3 -> \"3*\";
|
||
C3 -> x2;
|
||
none [label=\"\", shape=none]
|
||
x1 [label=x, shape=block];
|
||
x2 [label=x, shape=block];
|
||
sin [shape=block]
|
||
\"+\" [shape=block]
|
||
cos [shape=block]
|
||
\"3*\" [shape=block]
|
||
}
|
||
")
|
||
|
||
=== Пример построения краткой формы АСД языка plcc
|
||
|
||
Краткая форма АСД состоит в сокрытии композиционного управляющего узла с под одноместными функциями:
|
||
|
||
#render("
|
||
digraph {
|
||
none -> sin
|
||
sin -> \"+\";
|
||
\"+\" -> ┴;
|
||
┴ -> cos;
|
||
cos -> x1;
|
||
┴ -> \"3*\";
|
||
\"3*\" -> x2;
|
||
x1 [label=x];
|
||
x2 [label=x];
|
||
none [label=\"\", shape=none]
|
||
}
|
||
")
|
||
|
||
== Пример равенства АСД
|
||
|
||
За счет свойства коммутативности операции сложения для чисел $a + b = b + a$, одно поддерево плюс другое равно те же самые деревья, но сложенные в обратном порядке:
|
||
|
||
#render("
|
||
digraph {
|
||
none -> sin
|
||
sin -> \"+\";
|
||
\"+\" -> ┴;
|
||
┴ -> cos;
|
||
cos -> x1;
|
||
┴ -> \"3*\";
|
||
\"3*\" -> x2;
|
||
x1 [label=x];
|
||
x2 [label=x];
|
||
|
||
|
||
nonen -> sinn
|
||
sinn -> plusn;
|
||
plusn -> ┴n [color=red];
|
||
┴n -> triple [color=red];
|
||
triple -> x2n;
|
||
┴n -> cosn [color=red];
|
||
cosn -> x1n;
|
||
|
||
x1n [label=x];
|
||
x2n [label=x];
|
||
|
||
|
||
none, nonen [label=\"\", shape=none]
|
||
sinn [label=sin]
|
||
plusn [label=\"+\", color=red]
|
||
cosn [label=cos]
|
||
┴n [label=┴, color=red]
|
||
triple [label=\"3*\"]
|
||
}
|
||
")
|