GithubHelp home page GithubHelp logo

haysaycheese / mna Goto Github PK

View Code? Open in Web Editor NEW
2.0 2.0 0.0 108 KB

Реалізація інтерпретатора Нормальних Алгоритмів Маркова (МНА) на С++.

Prolog 0.58% C++ 99.42%

mna's Introduction

mna

Реалізація Нормальних Алгоритмів Маркова (МНА) на С++.

Реалізовано всі передбачені даною мат. моделлю операції, в тому числі задання вихідного алфавіту Т та вихідного слова V, над яким проводяться перетворення, описані в інструкціях для виконання інтерпритатором.

#Синтаксис ###Завантаження алфавіту Алфавіт задається множиною T={u1, u2, ... un}, кожен елемент якої вважається окремим символом. Інтерпритор завантаижить всі символи, що розташовані між відкриваючою фігурною дужкою { та закриваючою фігурною дужкою }, всі інші символи, що розташовано за } буде проігнороано.

За теорією НАМ, символ алфавіту є дискретним, тобто не може мати складових частин. З огляду на це, інтерпритатор підтримує ініціалізацію алфавіту ASCII-символами лат. алфавіту, що можуть бути записані одним із наступних способів:

T={qwerty} - ініціалізація алфавіту символами q, w, e, r, t, y, кожен з яких інтерпритується окремо.

Для зручності читання вихідних кодів введено можливість розділяти символи алфавіту комою, наприклад:

T={q,w,e,r,t,y}. В даному випадку, символ коми буде проігноровано інтерпритором як символ-розділювач. Якщо ж виникне необіхдність використати як символ алфавіту також і символ коми, тоді його слід спеціальним чином екранувати за допомогою символу \. Послідовність символів \, вкаже інтерпритатору на необхідність завантаження коми як окремого символу, наприклад:

T={q,w,e,r,t,y,\,}

Аналогічно слід вчинити із символом \, якщо виникне необхідність використати його я символ алфавіту. Приклад:

T={q,w,e,r,t,y,\\}

В даній реалізації, символи алфавіту можуть дублюватись, відповідне повідомлення про дублювання символу буде показано користувачу у виводі інтерпритатора, проте це не призводить до його аварійної зупинки. Також, інтерпритатор не зупиняється, якщо в інструкціях зустрічаютсья символи, що не є визначеними в алфавіті, хоча повідомлення про це користувачу також показується.

###Завантаження вихідного слова Вихідним словом вважається слово, над яким виконуватимуться операції, визначені іструкціями машини. Вихідне слово задається наступним чином:

V=qwerty - де, V= директива завантаження вихідного слова, а всі символи, розміщені праворуч від = є символами вихідного слова.

###Перелік інструкцій для виконання Інструкціями НАМ вважаються записи виду:

[замінюване]->[замінник] (1) та [замінюване]->.[замінник] (2)

Для більш розширеного опису призначення даних конструкцій моделі - перегляньте теорію НАМ, за посиланням вище.

###Поведінка інтерпритора 0. Після успішного виконання інструкції - наступною буде виконано першу інструкцію зі списку, а не наступну. 0. Після виконання будь-якої інструкції першим символом опрацьовуваного слова завжди буде "!" (аналог символу лямбда, що застосовується в теорії НАМ для позначення початку опрацьовуваного слова). 0. Якщо замінник буде визначено як "!" - замінюване буде видалено із опрацьовуваного слова, оскільки символ "!" інтерпритується як нульовий символ. 0. Після виконання будь-якої інструкції останнім символом опрацьовуваного слова завжди буде "@" (деяке послаблення теорії НАМ, для легшого визначення останнього символу в слові). 0. Інтерпритатор завершить власну роботу, якщо на певній ітерації не виконаєтсья жодна інструкція зі списку.

Приклад НАМ-програми для даного інтерпритатора

Розглянемо програму, яка замінить у виразі "abra-kadabra" всі символи "а" на "u".

t={abr-kdu}

v=abra-kadabra

a->u

Ліцензія

Public domain.

Інше

Файл .pro - файл проекту для Qt Creator.

mna's People

Contributors

haysaycheese avatar

Stargazers

 avatar  avatar

Watchers

 avatar  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.