radd_djur 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 81c593af1a6b8fa7adbc48d74bd12a0d452cc3b8
4
- data.tar.gz: 9c2d118ba3047f06b2745f69e73ea1f3b777a2d3
3
+ metadata.gz: a42890f07e0cbcca892af8f2ae54374c34a4c1a0
4
+ data.tar.gz: f19ac74763ed3f23d2dd52198b457c03203253ee
5
5
  SHA512:
6
- metadata.gz: e665757f618377aeff4b7556fb0ed3c6d77f1e290701f82280c9768e69e481e7f0d0031b71d2cc2dd5b93f546b31e6a84322c0fdbe86be0ed893cab2ac907a7c
7
- data.tar.gz: 1ef6ebb0611545820d957cd29c2c309504942238fab8fdfce57afd459848f6edc9d4dbab5e50f14b7d183c6bcf601398ae85ee85a8ba13389556d0f09f32a0eb
6
+ metadata.gz: 99ee8d2eca9c7a9ca943586bb9db2229e364e6804674a718b059f05a792267eb4137b58501eef70a765575ac0ce3dc841f6ab705ac3c211d04e9963139bd6a27
7
+ data.tar.gz: f6c97cd1f7d987e3c0e1329c73d32080470f63dbde20b33b49b529a285f7e89609d6c25a37f38db3ba5d4d7595c48aa794f1acf6609c29d131fefbdb4a0e9971
data/README.md CHANGED
@@ -1,7 +1,11 @@
1
1
  radd\_djur - Packrat parser combinator library for Ruby
2
2
  =======================================================
3
3
 
4
- This project aims to provide immutable data structures for Ruby.
4
+ Packrat parser combinator library for Ruby
5
+
6
+ [![Build Status](https://secure.travis-ci.org/shugo/radd_djur.png)](http://travis-ci.org/shugo/radd_djur)
7
+ [![Gem Version](https://badge.fury.io/rb/radd_djur.png)](http://badge.fury.io/rb/radd_djur)
8
+ [![Dependency Status](https://gemnasium.com/shugo/radd_djur.svg)](https://gemnasium.com/shugo/radd_djur)
5
9
 
6
10
  Install
7
11
  -------
@@ -13,7 +17,7 @@ $ gem install radd_djur
13
17
  Documentation
14
18
  -------------
15
19
 
16
- * [API Reference](http://rubydoc.info/github/shugo/radd_djur/frames)
20
+ * [API Reference](http://www.rubydoc.info/github/shugo/radd_djur/master)
17
21
 
18
22
  Example
19
23
  -------
@@ -74,6 +78,15 @@ Example
74
78
  }
75
79
  p g.parse("2*(3+4)")
76
80
 
81
+ The above rules can be simplified using Array:
82
+
83
+ # additive <- multitive '+' additive / multitive
84
+ define :additive do
85
+ [:multitive, "+", :additive].bind { |x, *, y|
86
+ ret x + y
87
+ } / :multitive
88
+ end
89
+
77
90
  License
78
91
  -------
79
92
 
data/lib/radd_djur/dsl.rb CHANGED
@@ -1,5 +1,7 @@
1
1
  module RaddDjur
2
2
  module DSL
3
+ include Immutable
4
+
3
5
  refine Object do
4
6
  def bind(&block)
5
7
  to_parser.bind(&block)
@@ -49,5 +51,24 @@ module RaddDjur
49
51
  }
50
52
  end
51
53
  end
54
+
55
+ refine Array do
56
+ def bind(&block)
57
+ list = List.from_array(self)
58
+ bind_list(list, List[], block)
59
+ end
60
+
61
+ private
62
+
63
+ def bind_list(list, args, block)
64
+ if list.empty?
65
+ block.call(*args.reverse.to_a)
66
+ else
67
+ list.head.bind { |x|
68
+ bind_list(list.tail, Cons[x, args], block)
69
+ }
70
+ end
71
+ end
72
+ end
52
73
  end
53
74
  end
@@ -5,6 +5,14 @@ using RaddDjur::DSL
5
5
 
6
6
  module RaddDjur
7
7
  class Grammar
8
+ INSTANCE_EVAL_USING_AVAILABLE =
9
+ begin
10
+ instance_eval(using: RaddDjur::DSL) {}
11
+ true
12
+ rescue
13
+ false
14
+ end
15
+
8
16
  class Result
9
17
  end
10
18
 
@@ -165,7 +173,13 @@ module RaddDjur
165
173
  def initialize(start_symbol, &block)
166
174
  @parsers = {}
167
175
  @start_symbol = start_symbol
168
- instance_exec(&block) if block
176
+ if block
177
+ if INSTANCE_EVAL_USING_AVAILABLE
178
+ instance_eval(using: RaddDjur::DSL, &block)
179
+ else
180
+ instance_eval(&block)
181
+ end
182
+ end
169
183
  end
170
184
 
171
185
  def parse(str)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: radd_djur
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shugo Maeda
@@ -53,7 +53,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
53
53
  version: '0'
54
54
  requirements: []
55
55
  rubyforge_project:
56
- rubygems_version: 2.5.1
56
+ rubygems_version: 2.6.6
57
57
  signing_key:
58
58
  specification_version: 4
59
59
  summary: Packrat parser combinator library for Ruby