Pivotal Labs

Main menu

Skip to primary content
Skip to secondary content
  • About
  • Case Studies
  • Team
    • Executives
    • Locations
      • San Francisco (HQ)
      • Boston
      • Boulder
      • Denver
      • London
      • Los Angeles
      • New York
  • Community
    • Blogs
    • Tech Talks
    • Events
  • Careers
    • Lifestyle
    • Principles & Practices
    • Benefits
    • FAQ
    • Apply
  • Tools
  • Contact
    • Press Room
    • Press Releases
    • In The News
    • Press Kit
  • All
  • Labs
  • Standup
  • Tracker

Treetop 1.0.1

Pivotal Labs
Saturday, September 15, 2007

I’ve been working on a parsing framework for Ruby since January called Treetop. I just released version 1.0.1 and recorded this screencast demonstrating its use.

  • 0 Shares
  • Share on Facebook
  • Share on Twitter

13 Comments

  1. DJ Davis says:

    Sorry about that, Ajax submit button + no feed back + slow server response = 3 extra posts

    December 12, 2007 at 11:50 pm

  2. Zach Dennis says:

    http://www.pivotalblabs.com/files/treetop-arithmetic-example.mov

    Nathan, what screen capturing tool did you use for the mov?

    December 12, 2007 at 11:50 pm

  3. steve d says:

    That’s pretty sweet, nice job man.

    December 12, 2007 at 11:50 pm

  4. Nathan Sobo says:

    I used Snapz Pro X. Sorry for the link confusion I thought Typo would create one automatically and the movie took so long to upload that I let it finish after I left for the day.

    December 12, 2007 at 11:50 pm

  5. Ross Hale says:

    Awesome!

    December 12, 2007 at 11:50 pm

  6. Alex C says:

    Inspiring. I want to go parse something!

    December 12, 2007 at 11:50 pm

  7. matt says:

    Been using the treetop gem and it is excellent. I hit a problem though, I need to be able to take phrases and pick out n number of words between my syntax/keywords. I can easily take a sentence ‘keyword keyword ruby” and parse out ruby, but for example I want the value ‘thanks ruby’ from the following sentance. “keyword keyword thanks ruby keyword”

    December 12, 2007 at 11:50 pm

  8. Nathan Sobo says:

    The problem you’re talking about is an excellent candidate for the application of a very powerful feature of parsing expression grammars that I didn’t cover in this screencast: lookahead assertions. There’s an example of their use in metagrammar.treetop, the grammar for treetop grammar files. I can briefly address their application to your example problem here.

    Say I want to match the word “keyword” followed by n words that are not “keyword” followed by another “keyword”. You encode this in the parsing expression language as follows.

    rule example
      'keyword' (!'keyword' other_word)+ 'keyword'
    end
    

    The important part of the above code sample is the bang-prefixed 'keyword'that guards the repeated other_word nonterminal. Basically, this is saying: look ahead at the next input and make sure it does not match ‘keyword’. As long as it doesn’t, proceed with the parse without consuming any input, trying to match other_word. As soon as input matching 'keyword' is encountered, the repeated expression does not match, and this input is matched by the final 'keyword' terminal.

    Anyway, hope this helps. Check out other resources for parsing expressions out there on the internet for more information on all this stuff. I implement them in a pretty standard way. I’ll be getting more documentation online gradually leading up to RailsConf.

    December 12, 2007 at 11:50 pm

  9. Case insensitivity? says:

    Very cool this treetop. I’ve been looking for something like this for some time – please, please, please do not abandon it as so many similar Ruby projects have been abondoned.

    That said, I’m wondering how do you handle case insensitivity? for example, I’m parsing a language in which all the keywords are case insensitive (VHDL) so ‘if’ is the same as ‘IF’ – how is that handled in your implementation of PEG?

    December 12, 2007 at 11:50 pm

  10. will says:

    Nathan, the video seems to be unavailable by now, could you upload it somewhere, I saw it a few weeks ago, but now I tried to show it to a friend of mine, the link didn’t work.

    December 18, 2007 at 5:40 pm

  11. chris says:

    I’m not Nathan, and its a late response, but case insensitivity seems to be handled simply by, e.g.:

    rule if
    [Ii] [Ff]
    end

    January 21, 2008 at 5:43 pm

  12. Mushtaq says:

    Hi Nathan,

    I saw your Treetop screen cast at RubyConf 2007, it was an excellent presentation.

    In one of our projects we have to implement a DSL which will parse the plain text in to rails active record statements and execute them. For example say we have a text box where we will enter “get me all the timesheets for project XYZ” this statement should get parsed and get us timesheets for XYZ project from the database(both timesheet and project are database tables). And one more thing is that the text what we enter in text box shouldn’t have any predefined order for example we can also enter “show me all members who have not submitted timesheets for X month”.

    We are thinking of using Treetop parser to parse the text and convert it in to active record statements, shall we use treetop to implement this feature or should we implement our own parser , your suggestion would be of great help.

    November 26, 2008 at 7:46 am

  13. Ari says:

    Thank you for this excellent library… it’s been a joy to use so far.

    I was looking for some example of what to actually do with the finished tree after you’ve parsed your text — how do I traverse the tree to actually do something with it?

    For example, I need to know how many child elements each node in the tree contains. Is there a built-in way to navigate the finished tree? I haven’t seen this addressed anywhere.

    Thanks…

    January 1, 2009 at 10:46 pm

Add New Comment Cancel reply

Your email address will not be published.

Pivotal Labs

Pivotal Labs

Recent Posts

  • Does the set of all sets contain itself?
  • Standup 3/8/2012
  • Standup 3/7/2012
Subscribe to Pivotal's Feed

Author Topics

riddles (1)
agile (167)
capistrano (2)
rails (26)
movember (1)
git (10)
railsdoc (1)
object-design (1)
bdd (3)
cucumber (3)
linkedin (1)
oauth (1)
ruby (17)
tdd (2)
lvh.me (1)
rails 3.1.1 (1)
selenium (6)
homebrew (1)
mysql (5)
rvm (1)
sproutcore (1)
paperclip (2)
pry (1)
amazon (1)
heroku (1)
rails3 (2)
jasmine (3)
design (3)
process (12)
productivity (8)
learning (1)
olin (1)
migrations (2)
mongodb (2)
devise (2)
javascript (13)
rubymine (4)
ipad (1)
whurl (1)
head.js (1)
pairing (2)
tools (4)
pair programming (1)
rspec (10)
rspec2 (1)
ruby19 (1)
incubation (3)
startup (5)
api (1)
presenter (1)
vanna (1)
pivotal tracker (5)
capybara (1)
fakeweb (1)
webmock (1)
intern (1)
ruby on rails (25)
meetup (1)
textmate (1)
testing (20)
solr (4)
nyc-standup (11)
community (1)
opensource (3)
activerecord (4)
chrome (1)
mp4 (1)
activeresource (1)
flash (3)
neo4j (1)
nginx (1)
rsoc (1)
meta programming (1)
agile standup (7)
government (3)
webos (4)
xss (1)
jquery (1)
bundler (2)
ci (3)
gems (5)
postgresql (1)
geminstaller (1)
gemcutter (1)
cloud (2)
rack (2)
refraction (1)
gem (5)
refactoring (1)
validations (1)
webrat (1)
engine-yard (1)
firefox (2)
jsunit (1)
mongrel (2)
thin (1)
unicorn (1)
facebook (1)
rubygems (5)
jruby (1)
actioncontroller (1)
rails 2.3 (1)
palmpre (1)
autotest (1)
mac (2)
hosting (1)
goruco (11)
database (3)
railsconf (11)
gogaruco (4)
deployment (4)
github (1)
ie (1)
ajax (1)
intellij (1)
json (1)
asset packaging (1)
polonium (1)
character encoding (1)
utf-8 (1)
test (3)
civics (1)
hpricot (1)
rake (3)
sms (1)
unicode (1)
iphone (1)
java (1)
safari (1)
memory leaks (1)
rr (3)
editor (1)
css (1)
nyc (3)
performance (5)
fun (5)
enterprise rails (1)
health (1)
new and cool (1)
general (2)
treetop (1)
errors (1)
stack (1)
trace (1)
cache (1)
cookies (1)
freesoftware (1)
conferences (1)
development (1)
driven (1)
proxy (1)
caching (1)
peertopatent (1)
languages (1)
rest (2)
rubyforge (1)
sake (1)
file (1)
upload (1)
constants (1)
osx (1)
terminal (1)
pairprogramming (2)
  • About
  • Case Studies
  • Team
  • Community
  • Careers
  • Tools
  • Contact
  • Labs
  • Events

Contact Us

contact@pivotallabs.com
+1 415-77-PIVOT
TwitterLinkedInFacebook

Pivotal Tracker

Tracker is the award-winning agile project management tool that enables real-time collaboration around a shared, prioritized backlog.
Visit pivotaltracker.com >