Skip to content

python-ankara-toplulugu/lisp-workshop

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 

Repository files navigation

lisp-workshop

Bu repo, Lisp Interpreter workshop'ının hazırlık materyallerini, kaynaklarını ve ortaya çıkan kodlarını barındırır.

Amacımız sıfırdan bir Lisp Interpreter yazarak tokenizer, parser, AST, interpreter ve compiler gibi kavramları pratikte öğrenmektir. Uygulama dili olarak Python (veya tercih edilen başka bir dil) kullanılacaktır. Neden Lisp?

Lisp, S-Expression (Symbolic Expression) yapısını kullanır. Her şey parantezlerle ifade edilen listeler (ağaçlar) halindedir. Diğer dillerdeki gibi operatör önceliği, girinti (indentation) veya blok yapıları gibi karmaşık syntax kuralları yoktur. Sadece parantezleri ve içindekileri ayrıştıran bir kod yazmak parser oluşturmak için yeterlidir.

Örnek Karşılaştırma:

Python

print(2 * 5)

if 5 > 3:
    print("Büyük")
else:
    print("Küçük")

Lisp

(display (* 2 5))

(display (if (> 5 3) "Büyük" "Küçük"))

S-Expression Zaten Bir AST'dir

Python'da basit bir 5 * 3 işleminin arkada oluşturduğu AST (Abstract Syntax Tree) yapısı aşağıdaki gibi uzundur:

# print(ast.dump(ast.parse('5 * 3'), indent=2))
Module(
  body=[
    Expr(
      value=BinOp(
        left=Constant(value=5),
        op=Mult(),
        right=Constant(value=3)))])

Aynı işlemin Lisp karşılığı olan (* 5 3) zaten kendi başına bir AST formundadır. Bu yapısal sadelik, tokenizer ve parser yazma sürecini basitleştirir.

Kapsam ve Hedefler

1950'lere dayanan Lisp'in (Common Lisp, Scheme, Racket vb. birçok lehçesi vardır) en temel dialektlerinden biri olan Scheme'i baz alacağız. Ana referansımız Peter Norvig'in "Lispy" makalesi olacak, ancak implementasyonu daha modern bir Python syntax'ıyla gerçekleştireceğiz.

Workshop'ın sabit bir süresi veya tekrar sayısı yoktur; her oturumun sonunda gidişata göre bir sonraki adımlara karar verilecektir.

İlk Workshop Hedefi:

Temel veri tiplerinin işlenmesi

Built-in fonksiyonlar

define ve if gibi temel formlar

Çalışan bir REPL (Read-Eval-Print Loop)

İleriki Aşama Hedefleri:

Gelişmiş tipler (String, Boolean, Array vb.)

Standard Library oluşturma

Tail Call Optimization (TCO)

#### Kaynaklar

Lisp in Python (Norvig): Lispy 1 | Lispy 2

Build your own Lisp: buildyourownlisp.com/contents

#### Lisp 101

WIP -> Buraya basit bir Lisp tutorial'ı eklenecektir.

About

Lets build a lisp interpreter from scratch to understand interpreters

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors