docs added

This commit is contained in:
Gregory Bednov 2025-12-28 16:55:49 +03:00
commit 7df1b2745e
3 changed files with 2134 additions and 3 deletions

2017
docs/file.pdf Normal file

File diff suppressed because it is too large Load diff

112
docs/file.typ Normal file
View file

@ -0,0 +1,112 @@
#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*\"]
}
")

View file

@ -1,9 +1,11 @@
{ pkgs ? import <nixpkgs> {} }:
pkgs.mkShell {
buildInputs = [
pkgs.rustc
pkgs.cargo
buildInputs = with pkgs; [
rustc
cargo
typst
typstPackages.diagraph
];
}