Главная | post 639 # QVPC [ Связь ] [ no Python ] [ no AJAX ] [ css ]

QVPC

Jan 22nd, 2009 (Thursday) 18:36

Задача:
Написать лабораторные работы по темам:

1. Макет виртуальной машины
2. +Виртуальный дисплей
3. +Виртуальная клавиатура
4. Система прерываний
5. Иерархическая документация

Реализация: QVPC.

Проект представляет собой виртуальную машину, выполняющую интепретируемый язык программирования. В любой момент можно посмотреть карту памяти машины.

Интерпретатор последовательно выполняет команды, разделенные точкой с запятой или переводом строки (\n).

Команды:

cpy: копирует содержимое ячейки 0 в ячейки 1+
sto: записывает число 0 в ячейки 1+
sum: записывает сумму значений в ячейках 1+ в ячейку 0
jmp: переходит к исполнению строки, номер которой содержится в ячейке 0
int: создает обработчик прерывания 0, который переводит исполнение к строке, указанной в ячейке 1. После окончания программы исполнение продолжается со строки, в которой было вызвано прерывание.
prn: выводит содержимое ячеек 0+

Примечание: аргументы каждого оператора — ряд целых чисел. "ячейка 0" обознает "ячейка с номером из аргумента 0", а ячейки 1+ — ячейки с номерами из аргументов 1,2,3 и так далее.

Пример:

sto 3,1,2,3
cpy 1,4,5
sum 6,1,2,3,4,5
prn 6

Выведет 15.

На картинке выше приведен более сложный пример, использующий прерывания. Он выводит 1 в цикле, а при возникновении прерывания 1 выводит 666.

Исходник можно скачать здесь или получить через git:

git clone git://git.bitcheese.net/qvpc

Итак, все темы раскрыты (исходники я обработал doxygen и получил офигенную документацию), кроме виртуальной клавиатуры. Думаю, приделаю небольшую с фиксированными прерываниями.

Метки: code, qt, git | Комментировать[3] »

Jan 22nd, 2009 (Thursday) 18:56 от AlexanderMarkov@c7bd9cc7 GRAVATAR!

// Why doesn't cpp have lambdas? Or string switches either.
lex+yacc
Но cpp — говно, да.


Jan 22nd, 2009 (Thursday) 19:06 от Voker57 GRAVATAR!

> lex+yacc
а причем тут лямбды?

Если ты имел в виду использовать их для парсинга, то тут синтаксис очень простой и не хотелось дополнительные тулзы подключать.


Jan 22nd, 2009 (Thursday) 19:14 от AlexanderMarkov@c7bd9cc7 GRAVATAR!

Не важно. Весь смысл — в последнем предложении.


Прокомментировать

Ни одно из полей не обязательно.
Можно граиспользовать textile + NBL markup, a BB-code и HTML категорически запрещено.



(не для спама, а для Gravatar)