Presentation is loading. Please wait.

Presentation is loading. Please wait.

24 HOURS LATER Phillip Build Stuff, Lithuania, 2014.

Similar presentations


Presentation on theme: "24 HOURS LATER Phillip Build Stuff, Lithuania, 2014."— Presentation transcript:

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

2 THIS TALK IS *NOT* About how to write a compiler the hard way All theory For the faint of heart

3 THIS TALK *IS* ABOUT Abstract Syntax Trees Parsing Domain Specific Languages Interpreters Code Generation

4 LANGUAGE FAMILIES Lisp C ML BASIC

5 LANGUAGE DESIGN (CONSIDERED OPTIONAL) Adhoc PHP JavaScript Scala Copy&Delete Java J Go Copy&Add C# F# Haskell

6 TO THE TURTLES CODE Phillip Trelford, @ptrelford Build Stuff, Lithuania, 2014

7 TURTLE LANGUAGE repeat 10 [right 36 repeat 5 [forward 54 right 72]]

8 TURTLE AST module AST type arg = int type command = | Forward of arg | Turn of arg | Repeat of arg * command list

9 TWO GIRLS (5 & 7YRS) + TURTLE

10 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

11 SMALL BASIC AST /// Small Basic expression type 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

12 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.compiler theoryReflection Emit

13 RESOURCES Phillip Trelford, @ptrelford Build Stuff, Lithuania, 2014

14 F# KOANS [ ] 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 __

15 TRYFSHARP.ORG

16 F# BOOKS

17 QUESTIONS? Twitter: @ptrelford@ptrelford Blog: http://trelford.com/bloghttp://trelford.com/blog Turtle: http://fssnip.net/nNhttp://fssnip.net/nN


Download ppt "24 HOURS LATER Phillip Build Stuff, Lithuania, 2014."

Similar presentations


Ads by Google