From afb0363aa8aa4acdc6e4f6b36f0c8c5e6a50ce17 Mon Sep 17 00:00:00 2001 From: Bozhidar Batsov Date: Sat, 18 May 2013 08:36:36 +0300 Subject: [PATCH 1/2] Add gem version badge --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index fda70e444..2abc91206 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ # Parser +[![Gem Version](https://badge.fury.io/rb/parser.png)](http://badge.fury.io/rb/parser) [![Build Status](https://travis-ci.org/whitequark/parser.png?branch=master)](https://travis-ci.org/whitequark/parser) [![Code Climate](https://codeclimate.com/github/whitequark/parser.png)](https://codeclimate.com/github/whitequark/parser) [![Coverage Status](https://coveralls.io/repos/whitequark/parser/badge.png?branch=master)](https://coveralls.io/r/whitequark/parser) From ea26d72bc7657611b220c723e2a2d84cedf658c2 Mon Sep 17 00:00:00 2001 From: Bozhidar Batsov Date: Sat, 18 May 2013 08:51:45 +0300 Subject: [PATCH 2/2] Extend the README a bit --- README.md | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 57 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 2abc91206..1ce9e066a 100644 --- a/README.md +++ b/README.md @@ -5,29 +5,49 @@ [![Code Climate](https://codeclimate.com/github/whitequark/parser.png)](https://codeclimate.com/github/whitequark/parser) [![Coverage Status](https://coveralls.io/repos/whitequark/parser/badge.png?branch=master)](https://coveralls.io/r/whitequark/parser) -_Parser_ is a production-ready Ruby parser written in pure Ruby. It performs on par or better than Ripper, Melbourne, JRubyParser or ruby_parser. +_Parser_ is a production-ready Ruby parser written in pure Ruby. It +performs on par or better than Ripper, Melbourne, JRubyParser or +ruby_parser. ## Installation - $ gem install parser +~~~ +$ gem install parser +~~~ ## Usage Parse a chunk of code: ~~~ ruby -require 'parser/ruby20' +require 'parser/current' -p Parser::Ruby20.parse("2 + 2") +p Parser::CurrentRuby.parse("2 + 2") # (send # (int 2) :+ # (int 2)) ~~~ +Access the AST's source map: + +~~~ ruby +p Parser::CurrentRuby.parse("2 + 2").src + +# , +# @selector=#> + +p Parser::CurrentRuby.parse("2 + 2").src.selector.to_source + +#=> "+" +~~~ + Parse a chunk of code and display all diagnostics: ~~~ ruby -parser = Parser::Ruby20.new +parser = Parser::CurrentRuby.new parser.diagnostics.consumer = lambda do |diag| puts diag.render end @@ -46,6 +66,38 @@ p parser.parse(buffer) If you reuse the same parser object for multiple `#parse` runs, you need to `#reset` it. +You can also use the `ruby-parse` utility (it's bundled with the gem) to play with Parser: + +~~~ +$ ruby-parse -L -e "2+2" + +(send + (int 2) :+ + (int 2)) +2+2 + ~ selector +~~~ expression +(int 2) +2+2 +~ expression +(int 2) +2+2 + +$ ruby-parse -E -e "2+2" + +2+2 +^ tINTEGER 2 expr_end [0 <= cond] [0 <= cmdarg] +2+2 + ^ tPLUS "+" expr_beg [0 <= cond] [0 <= cmdarg] +2+2 + ^ tINTEGER 2 expr_end [0 <= cond] [0 <= cmdarg] +2+2 + ^ false "$eof" expr_end [0 <= cond] [0 <= cmdarg] +(send + (int 2) :+ + (int 2)) +~~~ + ## Features * Precise source location reporting.