Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
24 HOURS LATER Phillip Trelford, @ptrelford
#NDCLondon, 2014
THIS TALK IS *NOT*
About how to write a compiler the hard way
All theory
For the faint of heart
THIS TALK *IS*
ABOUT
Abstract Syntax Trees
Parsing
Domain Specific
Languages
Interpreters
Code Generation
LANGUAGE FAMILIES
Lisp
C
ML
BASIC
LANGUAGE DESIGN
(CONSIDERED OPTIONAL)
Adhoc
•PHP
•JavaScript
•Scala
Copy&Delete
•Java
•J
•Go
Copy&Add
•C#
•F#
•Haskell
TO THE TURTLES
CODE
Phillip Trelford, @ptrelford
#NDCLondon, 2014
TURTLE LANGUAGE
repeat 10
[right 36 repeat 5
[forward 54 right
72]]
TURTLE AST
module AST
type arg = int
type command =
| Forward of arg
| Turn of arg
| Repeat of arg * command list
TWO GIRLS (5 & 7YRS) +
TURTLE
SMALL BASIC
SAMPLE
Sub Init
gw = 598
gh = 428
GraphicsWindow.BackgroundColor =
"DodgerBlue"
GraphicsWindow.Width = gw
Grap...
SMALL BASIC AST
/// Small Basic expression
type expr =
| Literal of value
| Identifier of identifier
| GetAt of location
|...
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
...
RESOURCES Phillip Trelford, @ptrelford
#NDCLondon, 2014
F# KOANS
[<Koan>]
let SquareEvenNumbersWithPipelineOperator() =
(* In F#, you can use the pipeline operator to get the ben...
TRYFSHARP.ORG
BUY THE BOOK
QUESTIONS?
Twitter: @ptrelford
Blog:
http://trelford.com/blog
Turtle: http://fssnip.net/nN
Upcoming SlideShare
Loading in …5
×

24 Hours Later - NDC London 2014

1,386 views

Published on

Title: Write Your Own Compiler in 24 Hours

Compiler writers are often seen as the stuff of myth and legend.

In this session we'll step behind the proverbial curtain and reveal how compilers actually work.

Expect plenty of live code samples, primarily in F# and C#, covering language design and parsing, all-the-way through to emitting code.

This session is aimed as a primer for those interested in writing an external DSL, general purpose language or just understanding how these things work.

Published in: Software
  • Be the first to comment

24 Hours Later - NDC London 2014

  1. 1. 24 HOURS LATER Phillip Trelford, @ptrelford #NDCLondon, 2014
  2. 2. THIS TALK IS *NOT* About how to write a compiler the hard way All theory For the faint of heart
  3. 3. THIS TALK *IS* ABOUT Abstract Syntax Trees Parsing Domain Specific Languages Interpreters Code Generation
  4. 4. LANGUAGE FAMILIES Lisp C ML BASIC
  5. 5. LANGUAGE DESIGN (CONSIDERED OPTIONAL) Adhoc •PHP •JavaScript •Scala Copy&Delete •Java •J •Go Copy&Add •C# •F# •Haskell
  6. 6. TO THE TURTLES CODE Phillip Trelford, @ptrelford #NDCLondon, 2014
  7. 7. TURTLE LANGUAGE repeat 10 [right 36 repeat 5 [forward 54 right 72]]
  8. 8. TURTLE AST module AST type arg = int type command = | Forward of arg | Turn of arg | Repeat of arg * command list
  9. 9. TWO GIRLS (5 & 7YRS) + TURTLE
  10. 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. 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. 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 fairly capable 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.
  13. 13. RESOURCES Phillip Trelford, @ptrelford #NDCLondon, 2014
  14. 14. 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 __
  15. 15. TRYFSHARP.ORG
  16. 16. BUY THE BOOK
  17. 17. QUESTIONS? Twitter: @ptrelford Blog: http://trelford.com/blog Turtle: http://fssnip.net/nN

×