Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
24 HOURS LATER Phillip Trelford, @ptrelford
#NCrafts Paris, 2015
THIS TALK IS *NOT*
About how to write a compiler the hard way
All theory
For the faint of heart
THIS TALK *IS*
ABOUT
Domain Specific
Languages
Abstract Syntax Trees
Parsing
Interpreters
Code Generation
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
#NCrafts Paris, 2015
TURTLE LANGUAGE
repeat 10
[right 36 repeat 5
[forward 54 right
72]]
TURTLE AST
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
...
http://tinyurl.com/funbasi
c
FUN BASIC - WINDOWS
STORE APP
RESOURCES Phillip Trelford, @ptrelford
#NCrafts Paris, 2015
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
Nächste SlideShare
Wird geladen in …5
×

24 Hours Later - NCrafts Paris 2015

Write Your Own Compiler in 24 Hours at the NCrafts conference in Paris

Ähnliche Bücher

Kostenlos mit einer 30-tägigen Testversion von Scribd

Alle anzeigen

Ähnliche Hörbücher

Kostenlos mit einer 30-tägigen Testversion von Scribd

Alle anzeigen
  • Als Erste(r) kommentieren

24 Hours Later - NCrafts Paris 2015

  1. 1. 24 HOURS LATER Phillip Trelford, @ptrelford #NCrafts Paris, 2015
  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 Domain Specific Languages Abstract Syntax Trees Parsing Interpreters Code Generation
  4. 4. LANGUAGE DESIGN (CONSIDERED OPTIONAL) Adhoc •PHP •JavaScript •Scala Copy&Delete •Java •J •Go Copy&Add •C# •F# •Haskell
  5. 5. TO THE TURTLES CODE Phillip Trelford, @ptrelford #NCrafts Paris, 2015
  6. 6. TURTLE LANGUAGE repeat 10 [right 36 repeat 5 [forward 54 right 72]]
  7. 7. TURTLE AST type command = | Forward of arg | Turn of arg | Repeat of arg * command list
  8. 8. TWO GIRLS (5 & 7YRS) + TURTLE
  9. 9. 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
  10. 10. 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
  11. 11. 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.
  12. 12. http://tinyurl.com/funbasi c FUN BASIC - WINDOWS STORE APP
  13. 13. RESOURCES Phillip Trelford, @ptrelford #NCrafts Paris, 2015
  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

×