rockit: a parser generator for ruby

21
Rockit Jason Morrison Language Processors and Compiler Construction Winter 2006-3

Upload: jason-morrison

Post on 25-Dec-2014

4.098 views

Category:

Technology


1 download

DESCRIPTION

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/

TRANSCRIPT

Page 1: Rockit: A Parser Generator for Ruby

Rockit

Jason MorrisonLanguage Processors and Compiler Construction

Winter 2006-3

Page 2: Rockit: A Parser Generator for Ruby

Ruby Rockit: Overview

• It used to be GLR.

• Maybe in the future it will be PEG.

• It’s kind of there.

• Let’s see!

Page 3: Rockit: A Parser Generator for Ruby

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?

Page 4: Rockit: A Parser Generator for Ruby

Ruby Rockit: Overview

• It used to be GLR.

• Maybe in the future it will be PEG.

• It’s kind of there.

• Let’s see!

Page 5: Rockit: A Parser Generator for Ruby

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!

Page 6: Rockit: A Parser Generator for Ruby

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.

Page 7: Rockit: A Parser Generator for Ruby

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)

Page 8: Rockit: A Parser Generator for Ruby

Ruby Rockit: Overview

• It used to be GLR.

• Maybe in the future it will be PEG.

• It’s kind of there.

• Let’s see!

Page 9: Rockit: A Parser Generator for Ruby

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

Page 10: Rockit: A Parser Generator for Ruby

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!

Page 11: Rockit: A Parser Generator for Ruby

What’s PEG?

• “Parsing Expression Grammar”

• No separate tokenizing phase

• Unambiguous (one tree for valid parse)

• No left recursion (as with LL)

Page 12: Rockit: A Parser Generator for Ruby

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

Page 13: Rockit: A Parser Generator for Ruby

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

Page 14: Rockit: A Parser Generator for Ruby

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.

Page 15: Rockit: A Parser Generator for Ruby

Ruby Rockit: Overview

• It used to be GLR.

• Maybe in the future it will be PEG.

• It’s kind of there.

• Let’s see!

Page 16: Rockit: A Parser Generator for Ruby

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!

Page 17: Rockit: A Parser Generator for Ruby

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

Page 18: Rockit: A Parser Generator for Ruby

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!

Page 19: Rockit: A Parser Generator for Ruby

Rockit 0.7.2

• Arithmetic expression example

Page 20: Rockit: A Parser Generator for Ruby

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!

Page 21: Rockit: A Parser Generator for Ruby

Resources

• These slides and I:– http://jayunit.net/rockit– [email protected]

• 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