Интерпретатор QSet

#
c++
qset
esolang
ctf

QSet - эзотерический язык программирования из таска на ABCTF-2016. Программа на нём представляет собой последовательноть пар списков символов.

Формальный синтаксис:

symbol = ALPHA
multiset = symbol / symbol " " multiset
instruction = multiset "|" multiset
program = instruction / instruction "\n" program

Семантика:

multiset<symbol> state = input
while True:
  for (L, R) : (multiset<symbol>, multiset<symbol>) in program:
    if R ⊆ S:
      state = state - R + L
      break
  if state is not modified:
    break
multiset<symbol> output = state

Вход и выход - конечные последовательности натуральных чисел. Символы i0, i1 и т.д. содержат входную последовательноть, а символы o0, o1, … используются для вывода.

Об этом проекте

Просто интерптератор для интересного, на мой взгляд, эзотерического языка. Сделано just4fun пока мне было нечем заняться на паре. Кстати, этот таск на CTF я решил написав оптимизирующий компилятор специального недоязыка в QSet, но если я буду еще и райтапы в проектах тут расписывать, сайт просто утонет в контенте.

Примечания