Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.
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
Próxima SlideShare
Cargando en…5
×

24 Hours Later - NCrafts Paris 2015

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

  • Sé el primero en comentar

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

×