From 76b75f9c544496be8f6e215a3d4f2e32ad1f5fa9 Mon Sep 17 00:00:00 2001 From: kappa Date: Sun, 24 Feb 2019 15:52:09 +0100 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=BE=D1=87=D0=B5=D1=82=D0=BE=20=D0=BF?= =?UTF-8?q?=D0=B8=D1=81=D0=B0=D1=9A=D0=B5=20=D0=BC=D0=B0=D1=82=D1=83=D1=80?= =?UTF-8?q?=D1=81=D0=BA=D0=BE=D0=B3=20=D1=80=D0=B0=D0=B4=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 2 +- doc/lit.bib | 80 +++++++++++++++++++++++++++++++++++++++++++++++++++++ doc/rad.tex | 75 +++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 156 insertions(+), 1 deletion(-) create mode 100644 doc/lit.bib create mode 100644 doc/rad.tex diff --git a/Makefile b/Makefile index 8c3f0ba..3eb018f 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ # cirilisp - компајлер за ћирилични дијалекат лиспа # ћирилисп верзија -VERSION = 0,8 +VERSION = 0,9 # локација за инсталацију PREFIX = /usr/local diff --git a/doc/lit.bib b/doc/lit.bib new file mode 100644 index 0000000..50bfbd3 --- /dev/null +++ b/doc/lit.bib @@ -0,0 +1,80 @@ +@article{graham02, + author = "Paul Graham", + title = "The Roots of Lisp", + year = "2001", + howpublished = "\url{http://www.paulgraham.com/rootsoflisp.html}", +} + +@article{mccarthy96, + author = {Mccarthy, John}, + year = {1996}, + month = {08}, + pages = {}, + title = {History of Lisp}, + volume = {13}, + journal = {ACM SIGPLAN Notices}, + doi = {10.1145/960118.808387} +} + +@article{r5rs, + author = "R. Kelsey and W. Clinger and J. Rees", + title = "Revised5 Report on the Algorithmic Language Scheme", + year = "1998", + volume = "33", + journal = "ACM SIGPLAN Notices", +} + +@article{r6rs, + author = "Sperber, Michael and Dybvig, R. Kent and Flatt, Matthew and Van Straaten, Anton and et al.", + title = "Revised6 Report on the Algorithmic Language Scheme", + year = "2007", + volume = "19", + journal = "Journal of Functional Programming", +} + +@book{zmaj, + author = "Alfred V. Aho and Monica S. Lam and Ravi Sethi and Jeffrey D. Ullman", + title = "Compilers: Principles, Techniques, and Tools, 2nd Edition", + year = "2006", + publisher = "Pearson Education, Inc", +} + +@book{steele84, + author = "Guy L. Steele", + title = "Common Lisp: the language", + year = "1984", + publisher = "Digital Press", +} + +@book{sicp, + author = "Harold Abelson and Gerald Jay Sussman and Julie Sussman", + title = "Structure and Interpretation of Computer Programs", + year = "1985", + publisher = "MIT Press", +} + +@article{harvey99, + author = "Brian Harvey and Matthew Wright", + title = "Simply Scheme : introducing computer science", + year = "1999", + publisher = "MIT Press", +} + +@article{McCarthy:1960:RFS:367177.367199, + author = {McCarthy, John}, + title = {Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I}, + journal = {Commun. ACM}, + issue_date = {April 1960}, + volume = {3}, + number = {4}, + month = apr, + year = {1960}, + issn = {0001-0782}, + pages = {184--195}, + numpages = {12}, + url = {http://doi.acm.org/10.1145/367177.367199}, + doi = {10.1145/367177.367199}, + acmid = {367199}, + publisher = {ACM}, + address = {New York, NY, USA}, +} diff --git a/doc/rad.tex b/doc/rad.tex new file mode 100644 index 0000000..16bb2a3 --- /dev/null +++ b/doc/rad.tex @@ -0,0 +1,75 @@ +\documentclass[a4paper]{article} + +\usepackage[T2A]{fontenc} +\usepackage[utf8]{inputenc} +\usepackage[serbian]{babel} +\usepackage{multicol} +\usepackage{textcase} +\usepackage{tocloft} +\usepackage[backend=biber]{biblatex} +\addbibresource{lit.bib} + +\author{Петар Каприш} +\title{Лисп интерпретер} + +\begin{document} +\begin{titlepage} + \centering + {\Large + \textbf{Гимназија ,,Јован јовановић Змај''} + + Нови Сад + } + + \vspace*{5cm} + \makeatletter + {\LARGE + \textbf{Матурски рад из програмирања} + + \vspace*{0.5cm} + \MakeUppercase{\textbf{\@title}} + } + + \vspace*{8.9cm} + + {\LARGE + Професор ментор: + \hfill + Ученик: + + \vspace*{0.3cm} + Марко Савић + \hfill + \@author + } + + \vspace*{\fill} + {\large Нови Сад, {\@date}.} + \makeatother +\end{titlepage} + +\section*{Предговор} +Овај рад се бави концепцијом и имплементацијом Ћирилисп програмског језика, минималистичког Лисп дијалекта осмишљеног да се користи на српском језику са ћириличком тастатуром. + +Моја главна мотивација за овај рад јесте моје опште интересовање за дизајн и имплементацију програмских језика и наручито за дизајн дијалеката Лиспа. Као додатни својство језика одлучио сам да он буде дефинисан тако да су све његове стандардне форме (као и симболи генерално) описани на српској ћирилици, било ми је интересантно да се уз посао дизајна и имплементације програмског језика, такође (додуше не на претерано захтеван начин) бавим радом на локализацији софтвера. + +\newpage +\tableofcontents +\newpage + +\section*{Увод\label{Uvod}} +\addcontentsline{toc}{section}{\protect\numberline{}Увод} +Ћирилисп је програмски језик, дијалекат Лиспа, осмишљен да се његов код пише на српској ћирилици. Има многа својства која би се очекивала од типичног Лисп дијалекта, укључујући типичне методе манипулације листама, комплетан (мада не хигијенски) макро систем, којим се може проширити синтакса језика за жељену употребу. + +У сврху овог матурског рада, направљена је имплементација овог језика, као интерпретер написан у C-у, који између осталог може покренути код у датом језику као извршиву датотеку у било којој Посикс сагласној Љусци. +\newpage + +\section{Кратак опис Лисп програмског језика} +Лисп је један од најстаријих програмских језика који је и данас у општој примени, једино надмашен од стране Фортрана. Познат је по својој једноставној и једноличној синтакси, аутоматским системима за управљање меморијом, и моћним макроима који могу проширити његову већ изражајну синтаксу. Управо због своје екстензибилности, и изражајне моћи основа његовог дизајна, Лисп је један од ретких програмских језика који поседује сопствене дијалекте. Постоје стотине Лисп дијалеката, сваки са другачијом сврхом и философијом дизајна. Од више функционалних и декларативних, као Ским или Кложур, до практичнијих и опште-наменских, као Комон Лисп и, па и обласно-специфичних као Емакс-Лисп. +\subsection{Историја} +Лисп је првобитно осмишљен од стране Џона Мекартија, при крају педесетих, за сврхе изтраживања у пољу вештачке интелигенције \textcite{mccarthy81}, +\subsection{Листе} +Лисп је акроним за List Processing (пређивање листа) што указује на најосновнију, и најбитнију сложену структуру података која је доступна у овом језику, наиме листа. Листа се гради помоћу конс ћелија, структура које поседују два показивача који могу показати на било какав податак. Ови показивачи се респективно зову CAR и CDR (Contents of the address part of the register number и Contents of the decrement part of the register number). Листа се уз њих дефинише као скуп конс ћелија где CAR сваке показује на одређени податак, члан листе, а CDR показује на следећу конс ћелију која чини исто као и претходна, све до задње, која показује на посебни тип објекта најчешће зван нил објекат. +%ovde ubaciti fotku +\printbibliography +\end{document}