GithubHelp home page GithubHelp logo

pda-analysis's Introduction

Конкретный синтаксис для описания языка магазинных автоматов

Формат описания магазинных автоматов

Магазинный автомат описывается текстовым файлом следующего содержания:

  1. На первой строке файла записаны все состояния автомата.
  2. На второй строке файла записано начальное состояние автомата.
  3. На третьей строке файла записаны принимающие состояния автомата.
  4. На четвёртой строке файла записаны конечные состояния автомата.
  5. На пятой строке файла записаны символы входного алфавита.
  6. На шестой строке файла записаны символы стекового алфавита.
  7. Далее идут сколько-то строк с описаниями правил перехода между состояниями со следующими особенностями:
    • "AUTOMATA_STATE" 'INPUT_ALPABET' `STACK_ALPHABET` ~ something - добавление к состоянию автомата перехода по символу исходного алфавита и стекового алфавита с некоторым набором результатов.
    • Набор результатов представляет из себя сколько-то пар из "AUTOMATA_STATE" (состояние автомата, в которое выполняется переход) и `STACK_ALPHABET` (стековые символы, которые будут добавлены в стек справа налево). Пары разделены альтернативой |. Значению пустой строки исходного алфавита соответствует слово EPS, отсутствию удаления / добавления символов из стека соответствует слово NULL, пустому состоянию стека соответствует слово EMPTY.
    • В конце каждой строки, кроме последней, стоит разделитель ,. При этом строкой в узком смысле является последовательность символов между двумя ,. Таким образом, разрешается писать списки состояний / символов или переходы в многострочном формате. Например, следующие два фрагмента файла эквивалентны:
      "I" 'love' 
      `multi` ~ "string" 
      `definition`,
      "I" 'love' `multi` ~ "string" `definition`,
    • Помимо значащих элементов языка, разрешается добавлять комментарии в формате <COMMENT>, где COMMENT состоит из любой последовательности символов ASCII, пробелы внутри комментария важны. Комментарии могут быть вложенными и многострочными. В случае многострочности, каждый переход на новую строку интерпретируется как пробел. В случае вложенности комментариев, весь комментарий проинтерпретируется как строки, разделённые |, где сначала идёт объединённый комментарий, а затем вложенные в порядке обхода (см. примеры обработки).
    • Состояниям стека, символам входного алфавита и символам стекового алфавита соответствуют любые последовательности символов ASCII; если очень хочется написать в названии `\`, "\", '\', ', " или `, то придётся их экранировать с помощью бэкслэша вот так: \\, \', \", \`.
    • Гарантируется, что помимо ,, ~, `, ', ", <>, |, EPS, NULL и EMPTY в файле с описанием автомата нет другой специальной лексики. Такие пробельные символы, как ' ', \t, \r, \f и \n, в общем случае игнорируются.

Описание работы лексера

Лексер реализован с помощью библиотеки ply на языке Python. Он содержится в файле pda-lexer.py. Запускается через консоль в формате:

python3 pda-lexer.py <имя_файла>

где <имя_файла> - имя файла, в котором содержится грамматика в формате, указанном выше. После исполнения программы, лексер сохраняет разобранную по токенам грамматику в файл <имя_файла>.out.

Пример ввода-вывода доступен в папке lexer-examples.

Описание работы конструктора

Реализована небольшая библиотека, которая помогает конструировать описание магазинных автоматов в заявленном формате. Она умеет добавлять / удалять состояния, добавлять / удалять переходы между состояниями, добавлять комментарии к переходам и сохранять описание в файле в нужном формате.

Материалы конструктора доступны в папке constructor-examples. Библиотека описана в файле pda_constructor.py, пример использования доступен в файле driver.py.

pda-analysis's People

Contributors

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