Project

treesl

0.0
No commit activity in last 3 years
No release in over 3 years
TreeSL parses flexible DSLs
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies
 Project Readme

TreeSL

TreeSL is my effort to define a flexible domain specific language (DSL). I think it’s similar to a recursive descent parser.

TreeSL will try a number of alternative matches for a given node until it finds a matching alternative. This is incredibly inefficient, but the goal is flexibility, not on-the-fly DSL speed.

Installation

#install gemcutter if you haven't
  gem install gemcutter
  gem tumble
  
  #install treesl
  gem install treesl

Example


  require 'treesl'

  parser = TreeSL.define do
    root 'person'

    person 'title firstname lastname'
    person 'title lastname'
    person 'firstname lastname'

    title /^Mr|Mrs|Ms$/
    firstname 'propernoun'
    lastname 'propernoun'
    propernoun /^[A-Z][a-z]+/
  end

  p parser.match("Sam Jones")    #=> {"firstname lastname"=>{"lastname"=>"Jones", "firstname"=>"Sam"}}
  p parser.match("Mr Sam Jones") #=> {"title firstname lastname"=>{"title"=>"Mr", "lastname"=>"Jones", "firstname"=>"Sam"}}
  p parser.match("Mr Jones")     #=> {"title lastname"=>{"title"=>"Mr", "lastname"=>"Jones"}}

Copyright

Copyright © 2009 Jacob Rothstein. See LICENSE for details.