Rockit: A Parser Generator for Ruby

  • 4,084 views
Uploaded on

Discusses Rockit, a parser generator for the Ruby langauge. Touches on versions 0.3.8 and 0.7.2, which are GLR and PEG, respectively. Describes GLR and PEG. Given for …

Discusses Rockit, a parser generator for the Ruby langauge. Touches on versions 0.3.8 and 0.7.2, which are GLR and PEG, respectively. Describes GLR and PEG. Given for http://www.cs.rit.edu/~ats/lp-2006-2/

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
4,084
On Slideshare
0
From Embeds
0
Number of Embeds
2

Actions

Shares
Downloads
22
Comments
0
Likes
2

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Rockit Jason Morrison Language Processors and Compiler Construction Winter 2006-3
  • 2. Ruby Rockit: Overview
    • It used to be GLR.
    • Maybe in the future it will be PEG.
    • It’s kind of there.
    • Let’s see!
  • 3. It used to be GLR
      • First home I found:
        • http://rockit.sourceforge.net/
      • Version 0.3.8, updated October 2001
      • What did it look like?
  • 4. Ruby Rockit: Overview
    • It used to be GLR.
    • Maybe in the future it will be PEG.
    • It’s kind of there.
    • Let’s see!
  • 5. Ruby Rockit: Overview
    • It used to be GLR.
      • What’s that?
    • Maybe in the future it will be PEG.
    • It’s kind of there.
    • Let’s see!
  • 6. What’s GLR?
      • Generalized LR
      • Parse tables have multiple transitions
      • When it hits S/R or R/R conflict:
        • Fork parse stack
        • Follow both paths
        • Got a rule that produces no transition? Discard that stack.
  • 7. How well does it work?
      • Run time scales with degree of nondeterminism.
      • O(n) on deterministic grammar.
      • Optimize: share common stack prefix/suffix. (Leads to a state lattice rather than stack)
  • 8. Ruby Rockit: Overview
    • It used to be GLR.
    • Maybe in the future it will be PEG.
    • It’s kind of there.
    • Let’s see!
  • 9. Maybe in the future it will be PEG.
      • Rockit 0.8.0
      • C-based parser, Ruby production rules
      • Unambiguous,  lookahead, O(n) Packrat parsing
      • Ruby and Java grammars, analyzers, pretty-printers
  • 10. Ruby Rockit: Overview
    • It used to be GLR.
    • Maybe in the future it will be PEG.
      • … PEG? Packrat?
    • It’s kind of there.
    • Let’s see!
  • 11. What’s PEG?
    • “Parsing Expression Grammar”
    • No separate tokenizing phase
    • Unambiguous (one tree for valid parse)
    • No left recursion (as with LL)
  • 12. What’s PEG?
    • Fixes “dangling else” via prioritization
    • Infinite lookahead via syntactic predicates
    • Let’s hear it from B ryan Ford (coined PEG)
    http://www.bford.info/pub/lang/peg-slides.pdf
  • 13. What’s Packrat?
    • Essentially: recursive descent
    • Memoization yields O(n) with unlimited lookahead and backtracking
    • Packrat parsers:
      • Java: Rats! (from xtc, eXTensible C project)
      • Haskell: Pappy
  • 14. Packrat: Since when?
    • Theory has been formalized since the 70s
    • Memoization was too heavy, then.
    • Now, RAM is cheap; memoization often consumes less than subsequent compilation steps.
  • 15. Ruby Rockit: Overview
    • It used to be GLR.
    • Maybe in the future it will be PEG.
    • It’s kind of there.
    • Let’s see!
  • 16. Ruby Rockit: Overview
    • It used to be GLR.
    • Maybe in the future it will be PEG.
    • It’s kind of there.
      • What do you mean by that?
    • Let’s see!
  • 17. Rockit 0.7.2
      • Newest available
      • Deemed 0.8.0 preview
      • Pure Ruby (=> slow) recursive-descent parser
      • Does not support syntactic predicates
      • Examples are only documentation
      • Unorganized source
      • No error hooks
  • 18. Ruby Rockit: Overview
    • It used to be GLR.
    • Maybe in the future it will be PEG.
    • It’s kind of there.
    • Let’s see!
      • Let’s see it anyways!
  • 19. Rockit 0.7.2
    • Arithmetic expression example
  • 20. Conclusion
    • 0.7.2 is interesting, but doesn’t have:
      • Syntactic predicates
      • Memoization
    • Still denotes grammar in code.
      • Pros: Quick, familiar.
      • Cons: Difficult to analyze.
    • If 0.8.0 is released as promised, should be great!
  • 21. Resources
    • These slides and I:
      • http:// jayunit.net/rockit
      • jason.p.morrison@gmail.com
    • PEG ML:
      • https:// lists.csail.mit.edu/mailman/listinfo/peg
    • Bryan Ford:
      • http:// pdos.csail.mit.edu/~baford/packrat
    • Wikipedia, Google for:
      • GLR parser, PEG grammar, Packrat parser