Информатика и вычислительная техника
Курсовая работа
  • формат txt, pdf
  • размер 264.34 КБ
  • добавлен 02 ноября 2009 г.
Курсовой проект - Компилятор Lisp в промежуточный код RISC-архитектуры
Задача:
Написать программу с нетривиального подмножества произвольного диалекта Лиспа (Lisp) в промежуточный код RISC-архитектуры

Компилятор --- это программа, предназначенная для трансляции высокоуровневого языка в абсолютный (машинный) код или,
иногда, в язык ассемблера. Входной информацией для компилятора (исходный код)
является описание алгоритма или программа на проблемно-ориентированном языке,
а на выходе компилятора — эквивалентное описание алгоритма на машинно-ориентированном языке (объектный код).

Наш Lisp не совсем похож на Lisp. Это только подмножество языка.
И компилятор~--- тоже, только выдает ассемблерный код несуществующей машины.
Однако, если представить что эта машина существует,
мы получаем вполне реальный компилятор,
который сильно упрощен но по сути делает тоже самое
что и настоящие компиляторы.
Для постоты реализации виртуальной машины необходимо
ввести достаточно простой язык этой машины.
В этом сильно помогает концепция RISC-процессоров.
При выполнении проекта был большой соблазн воспользоваться
стандартной библиотекой работы с регулярными выражениями, но мы
отказались от этой идеи, ибо это протеворичит смыслу задания.

Теория:
* Лексический анализ
* Синтаксический анализ
* Семантический анализ
* Оптимизация
* Регистровая RISC-машина
* Описание грамматики выбранного подмоножества языка Lisp

Работа выполнена на языках
* Lisp (Sheme)
* Python (можно на C++, c "функциональным" использованием шаблонов)
Методичка в формате — PDF
Отчет в формате — PDF
Исходники отчета — LaTeX2e

МАИ.
Факультет прикладной математики.
Кафедра вычислительной математики и программирования.
Преподаватели:
Алексей AVL Лебедев
Илья US-Marine Перетягин
Похожие разделы
Смотрите также

Журнал - Практика Функционального Программирования 2011 № 7

  • формат pdf
  • размер 4 МБ
  • добавлен 13 апреля 2011 г.
Седьмой номер был небыстр и нелегок в производстве; долгими студёными зимними вечерами, не покладая рук, трудились авторы и редакторы над его созданием. Но, пожалуй, труды себя оправдали — по разнообразию и качеству содержимого этот номер беспрецедентен; низкий поклон авторам. Мы уверены, что читатели откроют для себя из статей много нового, и надеемся, что этот номер окажется большим шагом к выполнению нашей основной задачи: повысить осведомлённ...

Лабораторная работа - Знакомство с языком Lisp. Абстракция вычислений

Лабораторная
  • формат zip
  • размер 166.12 КБ
  • добавлен 02 ноября 2009 г.
Задача: Реализовать процедуру нахождения неподвижной точки методом итераций в общем виде, то есть параметризованную оператором преобразования процедуру, вычисляющую преобразование Ньютона, и применить её для реализации метода Ньютона в решении уравнения: $e^{x} - e^{-x} - 2 = 0$. Нахождение производной также реализовать в виде процедуры (принимающей функцию и возвращающей функцию~ --- её производную). } Решение Для реализации данной программы н...

Лабораторная работа - Отложенные вычисления и ленивые списки в Лиспе. Нисходящий разбор по заданной LL(1)-грамматике

Лабораторная
  • формат pdf, txt
  • размер 776.61 КБ
  • добавлен 02 ноября 2009 г.
Задача: Написать программу, эмулирующую поведение детерминированного МП-автомата, составленного по заданной LL(1)-грамматике. Проверку принадлежности строки языку выполнить в виде поиска допускающего состояния в истории вычислений автомата. Историю вычислений реализовать в виде отложенного списка, то есть не допускается одновременное хранение в памяти всех промежуточных состояний автомата. Теория: Нисходящий синтаксический анализ осуществляется...

Лабораторная работа на языке Лисп (Lisp) - Списки

Лабораторная
  • формат doc
  • размер 40.5 КБ
  • добавлен 24 декабря 2010 г.
НГТУ Тема работы: Изучение рекурсивных структур языка на примере списка. В программе реализованы такие функции, как: Вывод списка на экран Вставка элемента по номеру Удаление элемента по номеру Интерактивность реализована при помощи меню.

Лабораторная работа №5

Лабораторная
  • формат doc
  • размер 7.3 КБ
  • добавлен 19 ноября 2008 г.
Отчет по лаб. работе на тему: "Арифметика и обработка списков в LISP. Задание функций". Задание: Реализовать средствами Лиспа пользовательские функции: UF1(x)=tn(x/8)+ctn(x/8), UF2(x)=ln^2 (x+4); связать с символом UFR двухэлементный список, элементами которого будут результаты вычисления соответственно первой и второй пользовательских функций, полученные при произвольном значении их аргументов; связать с символом Х1 список, обратный списку UFR;...

Лабораторная работа №7

Лабораторная
  • формат doc
  • размер 5.43 КБ
  • добавлен 19 ноября 2008 г.
Отчет по лаб. работе на тему: "Организация итерационных вычислений в LISP. Свойства символов". Задание: Вычислить сумму ряда целых чётных чисел от n до 2n; Определить предикат, проверяющий, обладает ли символ заданным свойством. Отчет содержит листинг программы.

Реферат - Общие сведения о функциональном программировании

Реферат
  • формат doc
  • размер 164.8 КБ
  • добавлен 14 ноября 2009 г.
Реферат. Общие сведения о функциональном программировании. Предисловие. Введение. Общие сведения о функциональном программировании. История функционального программирования. Основы функционального программирования. Краткость и простота. Строгая типизация. Модульность. Функции — это значения. Чистота (отсутствие побочных эффектов). Отложенные (ленивые) вычисления. Основы работы с HUGS 98. Панель инструментов HUGS 98. Команды консоли HUGS 98. Допол...

Реферат - Программирование на языке CLIPS

Реферат
  • формат pdf
  • размер 271.2 КБ
  • добавлен 18 декабря 2009 г.
Название языка CLIPS — аббревиатура от С Language Integrated Production System. Язык был разработан в Центре космических исследований NASA (NASA's Johnson Space Center) в середине 1980-х годов и во многом сходен с языками, созданными на базе LISP, в частности OPS5 и ART. Содержание Краткая история CLIPS. Правила и функции в CLIPS. Факты. Правила. Наблюдение за процессом интерпретации. Использование шаблонов. Определение функций. Объектно-ориент...

Fogus M., Houser C. The Joy of Clojure: Thinking the Clojure

  • формат pdf
  • размер 22.01 МБ
  • добавлен 06 апреля 2011 г.
Michael Fogus, Chris Houser. The Joy of Clojure: Thinking the Clojure. Manning Publications, 2011. - 360 p. - ISBN: 1935182641 Clojure is a dynamic programming language that targets the Java Virtual Machine. The Joy of Clojure goes beyond the syntax, and shows how to write fluent, idiomatic Clojure code. Readers will learn to approach programming challenges from a Functional perspective and master the Lisp techniques that make Clojure so elegant...

Halloway S. Programming Clojure

  • формат pdf
  • размер 1.61 МБ
  • добавлен 28 ноября 2009 г.
Clojure is a dynamic language for the Java Virtual Machine, with a compelling combination of features: Clojure is elegant. Clojure's clean, careful design lets you write programs that get right to the essence of a problem, without a lot of clutter and ceremony. Clojure is Lisp reloaded. Clojure has the power inherent in Lisp, but is not constrained by the history of Lisp. Clojure is a functional language. Data structures are immutable, and funct...