Code Monkey home page Code Monkey logo

glang's Introduction

GLang

Экспериментальная площадка для изучения формальных языков

Описание грамматики:

Категория = '{ Стрелки '} ;
Стрелка = Слово | Область Слово Кообласть | Слово Кообласть | Область Слово ;
Стрелки = Стрелка ', Стрелки | Стрелка ;
Область = Ноль | '{ Стрелки '} ;
Кообласть = Ноль | '{ Стрелки '} ;
Слова = Слово ', Слова | Слово ;
Слово = '[ Слова '] | Символы ;
Символы = Символ Символы | Символ ;
Символ = Буква | Цифра | Знак ;
Буква = 'a|'b|'c|'d|'e|'f|'g|'h|'i|'j|'k|'l|'m|'n|'o|'p|'q|'r|'s|'t|'u|'v|'w|'x|'y|'z|'A|'B|'C|'D|'E|'F|'G|'H|'I|'J|'K|'L|'M|'N|'O|'P|'Q|'R|'S|'T|'U|'V|'W|'X|'Y|'Z|
'а|'б|'в|'г|'д|'е|'ё|'ж|'з|'и|'й|'к|'л|'м|'н|'о|'п|'р|'с|'т|'у|'ф|'х|'ц|'ч|'ш|'щ|'ь|'ы|'ъ|'э|'ю|'я|'А|'Б|'В|'Г|'Д|'Е|'Ё|'Ж|'З|'И|'Й|'К|'Л|'М|'Н|'О|'П|'Р|'С|'Т|'У|'Ф|'Х|'Ц|'Ч|'Ш|'Ь|'Щ|'Ъ|'Ы|'Э|'Ю|'Я ;
Цифра = '0|'1|'2|'3|'4|'5|'6|'7|'8|'9 ;
Знак = '< | '> | '* | '+ | '- | '~: | '~ | 'id | '_ | '>: | '<: ;
Ноль = '{ '} ;
//Программа начинается и заканчивается фигурной скобкой, содержание в фигурных скобках - описание Категории
//1. Ключевым понятием для всех объявлений программы является Слово. Слово - это любой идентификатор (упорядоченный набор символов и цифр)
//или упорядоченный набор Слов. Упорядоченный набор Слов задается квадратными скобками, внутри которых через запятую перечисляются Слова.
//Примеры Слов, состоящих из одно идентификатора: 0,1,А,Б,ЭтоСлово,Банан
//Примеры составных Слов: [0,1],[Б,А,Н,А,Н]
//При этом Слово "Банан" принципиально отличается от слова "[Б,А,Н,А,Н]", т.к. "Банан" - это один идентификатор, атом в понятиях теории категорий,
//а "[Б,А,Н,А,Н]" - это составное Слово, состоящее из пяти атомов.
//
//2. Второе ключевое понятие Языка - Стрелка. Стрелка задаётся 4-мя способами: 
//  1) просто Словом - тогда у Стрелки есть только имя, 
//  но Область и Кообласть пустые;
//  2) Словом и Областью - задано имя и Область;
//  3) Словом и Кообластью - задано имя и Кообласть;
//  4) Словом и Областью и Кообластью - задано имя Область и Кообласть;


---------------------------------------------------------------------------------------------------------------------------------------------
{
  А{Б},
  Б{А},
  В{Г},
  Д,
  Е,
  Ж,
  З,
  Показать
  {
    [А,<:],
    [Б,<:],
    [Г,<:],
    [В,<:],
    [А,Б,*],       //Произведение А на Б - стрелка [А,Б]
    [А,Б,+],       //Сумма - сумма кообластей
    [А,Б,*,<:],    //Кообласть [А,Б] - произведение кообластей А и Б
    [[А,Б,*],<:],  //То же, что и строкой выше
    [А,Б,*,<:,[_,Б],~], //Отбор по шаблону из кообласти произведения
    [А,Б,*,<:,[_,А],~],  //Тоже отбор, но по другому шаблону
    [В,Г,*,<:],      //Без цикла, но с петлей на Г
    [В,Г,*,В,*,<:],  //Результат В*Г домножаем на В (в состав которого входит Г)
    [Д,Е,*,<:],      //произведение Д на Е. Д и Е не имеют кообластей
    [Д,Е,*,З,*,<:]  //произведение [Д,Е] на З
  }
}

//Результат:
//[А,<:]{А,Б}
//[Б,<:]{Б,А}
//[Г,<:]{Г}
//[В,<:]{В,Г}
//[А,Б,*]{[А,Б]}
//[А,Б,+]{А,Б}
//[А,Б,*,<:]{[А,Б],[А,А],[Б,Б],[Б,А]}
//[[А,Б,*],<:]{[А,Б],[А,А],[Б,Б],[Б,А]}
//[А,Б,*,<:,[_,Б],~]{[А,Б],[Б,Б]}
//[А,Б,*,<:,[_,А],~]{[А,А],[Б,А]}
//[В,Г,*,<:]{[В,Г],[Г,Г]}
//[В,Г,*,В,*,<:]{[[В,Г],В],[[В,Г],Г],[[Г,Г],В],[[Г,Г],Г]}
//[Д,Е,*,<:]{[Д,Е]}
//[Д,Е,*,З,*,<:]{[[Д,Е],З]}
---------------------------------------------------------------------------------------------------------------------------------------------

{
  A {1, 2},
  B {3, 4},
  Показать
  {
    [A,B,*,<]
  }
}

//Результат:
//[A,B,*,<]{[A,B],[A,3],[A,4],[1,B],[1,3],[1,4],[2,B],[2,3],[2,4]}

---------------------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------------------------
{
  Вход Ядра { А, Б },  // Определим структурные элементы Ядра
  Выход Ядра { В, Г },  
  Ядро { [Вход Ядра, Выход Ядра,*] }, // Определим Ядро A, как декартово произведения Входа на Выход

    Первый Слой  //Слои сети определяются через операции над ядрами - произведение, сумма
    {
        [
            [
                [Ядро,1], // Добавим ядру номер 1, 
                [Ядро,2]  // Добавим ядру номер 1, и получим два разных слова
            ],1    
        ] 
    },
    Второй Слой
    {
        [Ядро,2]
    },
 
  Сеть           
  {
    [
        Первый Слой,Второй Слой,*    //Сеть - декартово произведение первого слоя на второй
    ] 
  },
  Показать
  {
    [Сеть,<,<]
  }
}

//Результат:
//{Сеть,[ПервыйСлой,ВторойСлой,*],[ПервыйСлой,ВторойСлой],[ПервыйСлой,[Ядро,2],*],[[[[Ядро,1],[Ядро,2]],1],ВторойСлой,*],[[[[Ядро,1],[Ядро,2]],1],[Ядро,2],*]}

glang's People

Contributors

gurgutan avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.