24 HOURS LATER Phillip Trelford, @ptrelford Build Stuff, Lithuania, 2014.

17
24 HOURS LATER Phillip Trelford, @ptrelford Build Stuff, Lithuania, 2014

Transcript of 24 HOURS LATER Phillip Trelford, @ptrelford Build Stuff, Lithuania, 2014.

Page 1: 24 HOURS LATER Phillip Trelford, @ptrelford Build Stuff, Lithuania, 2014.

24 HOURS LATERPhillip Trelford, @ptrelfordBuild Stuff, Lithuania, 2014

Page 2: 24 HOURS LATER Phillip Trelford, @ptrelford Build Stuff, Lithuania, 2014.

THIS TALK IS *NOT*

About how to write a compiler the hard way

All theory

For the faint of heart

Page 3: 24 HOURS LATER Phillip Trelford, @ptrelford Build Stuff, Lithuania, 2014.

THIS TALK *IS* ABOUT

Abstract Syntax Trees

Parsing

Domain Specific Languages

Interpreters

Code Generation

Page 4: 24 HOURS LATER Phillip Trelford, @ptrelford Build Stuff, Lithuania, 2014.

LANGUAGE FAMILIES

Lisp

C

ML

BASIC

Page 5: 24 HOURS LATER Phillip Trelford, @ptrelford Build Stuff, Lithuania, 2014.

LANGUAGE DESIGN (CONSIDERED OPTIONAL)

Adhoc• PHP• JavaScript• Scala

Copy&Delete• Java• J• Go

Copy&Add• C#• F#• Haskell

Page 6: 24 HOURS LATER Phillip Trelford, @ptrelford Build Stuff, Lithuania, 2014.

TO THE TURTLES CODE

Phillip Trelford, @ptrelfordBuild Stuff, Lithuania, 2014

Page 7: 24 HOURS LATER Phillip Trelford, @ptrelford Build Stuff, Lithuania, 2014.

TURTLE LANGUAGE

repeat 10

[right 36 repeat 5

[forward 54 right 72]]

Page 8: 24 HOURS LATER Phillip Trelford, @ptrelford Build Stuff, Lithuania, 2014.

TURTLE AST

module AST

type arg = int

type command =

| Forward of arg

| Turn of arg

| Repeat of arg * command list

Page 9: 24 HOURS LATER Phillip Trelford, @ptrelford Build Stuff, Lithuania, 2014.

TWO GIRLS (5 & 7YRS) + TURTLE

Page 10: 24 HOURS LATER Phillip Trelford, @ptrelford Build Stuff, Lithuania, 2014.

SMALL BASIC SAMPLE

Sub Init

gw = 598

gh = 428

GraphicsWindow.BackgroundColor = "DodgerBlue"

GraphicsWindow.Width = gw

GraphicsWindow.Height = gh

color = "1=Orange;2=Cyan;3=Lime;"

size = "1=20;2=16;3=12;"

passed = 0

cd = "False" ' collision detected

EndSub

Page 11: 24 HOURS LATER Phillip Trelford, @ptrelford Build Stuff, Lithuania, 2014.

SMALL BASIC AST

/// Small Basic expressiontype expr = | Literal of value | Identifier of identifier | GetAt of location | Func of invoke | Neg of expr | Arithmetic of expr * arithmetic * expr | Comparison of expr * comparison * expr | Logical of expr * logical * expr

/// Small Basic instruction type instruction = | Assign of assign | SetAt of location * expr | PropertySet of string * string * expr

| Action of invoke | For of assign * expr * expr | EndFor | If of expr | ElseIf of expr | Else | EndIf | While of expr | EndWhile | Sub of identifier * string list | EndSub | Label of label | Goto of label

Page 12: 24 HOURS LATER Phillip Trelford, @ptrelford Build Stuff, Lithuania, 2014.

C# COMPILER IN 24 DAYS

Oh Yes! Neil Danson (aka The Do)

Now, I didn’t do any compiler theory in uni, I’ve never written a compiler before and I’ve only ever looked at Reflection Emit in anger. But despite these limitations I have a fairlycapable C# 0.5 compiler (in that it is a subset of the C# 1 compiler). Which means you can do it too – it took me less than a month.

Page 13: 24 HOURS LATER Phillip Trelford, @ptrelford Build Stuff, Lithuania, 2014.

RESOURCESPhillip Trelford, @ptrelfordBuild Stuff, Lithuania, 2014

Page 14: 24 HOURS LATER Phillip Trelford, @ptrelford Build Stuff, Lithuania, 2014.

F# KOANS

[<Koan>]let SquareEvenNumbersWithPipelineOperator() =(* In F#, you can use the pipeline operator to get the benefit of the parens style with the readability of the statement style. *)

let result = [0..5] |> List.filter isEven |> List.map square AssertEquality result __

Page 15: 24 HOURS LATER Phillip Trelford, @ptrelford Build Stuff, Lithuania, 2014.

TRYFSHARP.ORG

Page 16: 24 HOURS LATER Phillip Trelford, @ptrelford Build Stuff, Lithuania, 2014.

F# BOOKS

Page 17: 24 HOURS LATER Phillip Trelford, @ptrelford Build Stuff, Lithuania, 2014.

QUESTIONS?

Twitter: @ptrelford

Blog: http://trelford.com/blog

Turtle: http://fssnip.net/nN