Publicité
Publicité

Contenu connexe

Publicité

Easy Compilers With Ruby and Treetop

  1. VISHNU G O PA L EASY COMPILERS WITH RUBY AND TREETOP Saturday, 28 May 2011
  2. Vishnu Gopal • Started as a Software Engineer, SlideShare Inc. • Human-Computer Interaction from UCLIC, London • CTO, MobME Wireless. • Working with Ruby for over 5 years. ABOUT ME vishnugopal.com @vishnugopal Saturday, 28 May 2011
  3. College startup in 2006 • NASSCOM Global Leadership Award, 2011 • VAS & core network solutions for mobile operators • Over 40 engineers working in Ruby & 2 speakers at RubyConf India MOBME WIRELESS mobme.in @mobmewireless Saturday, 28 May 2011
  4. DRAGON BOOK • Aho, Sethi & Ullman • 1009 pages of wisdom Saturday, 28 May 2011
  5. Too complicated. • Meant for Computer Scientists Saturday, 28 May 2011
  6. Designed for a programmer • Not too hard to grok • Iterative development • Friendly • Fun IN RUBY Saturday, 28 May 2011
  7. COMPILERS? HOW ARE PARSERS AND COMPILERS USEFUL? Saturday, 28 May 2011
  8. A compiler converts a high-level language into a form that computers can understand. A parser structures a high-level language into an intermediate form that compilers can then use. WHAT? Saturday, 28 May 2011
  9. PARSING Saturday, 28 May 2011
  10. PARSING 2 Saturday, 28 May 2011
  11. Convert this regular expression into a FSM. • Run a block of text against this FSM and return true or false. COMPILING Saturday, 28 May 2011
  12. When you write a regular expression, you do not worry about all of this. You do not care about how it’s parsed, compiled or matched. • A regular expression matches strings, but what if you want to do other things with your own mini language? • A compiler construction library will help you do that. ABSTRACTION Saturday, 28 May 2011
  13. A search query language like Google’s: Cricket -Tendulkar • A SQL-like frontend for your favourite NoSQL backend: SELECT * FROM LIST redis.rubyconf • A small DSL to match twitter entries. tweet.text contains “India” AND tweet.text has hyperlink POSSIBILITIES Saturday, 28 May 2011
  14. Yacc & LEX • Bison & FLEX • Boost Proto NOT MY IDEA Saturday, 28 May 2011
  15. A RUBY WAY Saturday, 28 May 2011
  16. TREETWEET Saturday, 28 May 2011
  17. BNF Form: a computer-sciency way to define language keywords, syntax and order of precedence of operators. • Or, a formal definition that you can feed to a parser BACKUS NAUR Saturday, 28 May 2011
  18. TT BNF Saturday, 28 May 2011
  19. TT BNF 2 Saturday, 28 May 2011
  20. Inc orre ct! TT BNF 3 Saturday, 28 May 2011
  21. TT BNF 4 Saturday, 28 May 2011
  22. Expression Not Term Not Term Term “NOT” Term target = tweet.text binary_operator = contains argument = “India” TT BNF EXAMPLE Saturday, 28 May 2011
  23. BNF TO TREETOP Saturday, 28 May 2011
  24. GET IT WORKING! Saturday, 28 May 2011
  25. A compiler converts a high-level language into a form that computers can understand. A parser structures a high-level language into an intermediate form that compilers can then use. AGAIN? Saturday, 28 May 2011
  26. Syntax Oriented Programming • Matching rules can have Ruby methods inline or mixed in as a module. • These methods are available to the parser. • Implement a “compile” method for e.g. to compile parsed objects into an executable form. • Let us compile TreeTweet into our favourite language! SYNTAX FIRST Saturday, 28 May 2011
  27. TREETWEET LANGUAGE .treetop generates TREETWEET TWITTER LANGUAGE FIREHOSE TREETWEET PARSER is parsed by generates produces TWEET RUBY CODE RUBY OBJECT performs match BOOLEAN RESULT OVERVIEW Saturday, 28 May 2011
  28. COMPILE 1 Saturday, 28 May 2011
  29. COMPILE 2 Saturday, 28 May 2011
  30. COMPILE 3 Saturday, 28 May 2011
  31. COMPILE 4 Saturday, 28 May 2011
  32. COMPILE 5 Saturday, 28 May 2011
  33. What we’ve done is implement a cross-compiler. • The cross-compiler compiles the TreeTweet DSL down to Ruby. • It could however, be easily modified to compile it down to say Java, or even C if you need performance. • It’s small and concise. The treetop grammar is less than 50sloc. The compiler less than 400sloc. • It’s really easy to modify. RECAP Saturday, 28 May 2011
  34. github.com/vishnugopal • Not released yet, soon! SOURCE CODE Saturday, 28 May 2011
  35. codejam.mobme.in QUESTIONS? Saturday, 28 May 2011
Publicité