kpeg 0.9.0 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -58,7 +58,7 @@ a = c
58
58
  b(p) = x
59
59
  STR
60
60
 
61
- gram = match(str)
61
+ assert match(str) # HACK what is this testing?
62
62
  end
63
63
 
64
64
  def test_assign_with_multiple_args
@@ -289,7 +289,7 @@ Value = NUMBER:i { i }
289
289
  | ID:i !ASSIGN { vars[i] }
290
290
  | OPEN Expr:i CLOSE { i }
291
291
  STR
292
- m = match(str)
292
+ assert match(str) # HACK what is this testing?
293
293
  end
294
294
 
295
295
  def test_seq
@@ -5,7 +5,7 @@ require 'kpeg/grammar_renderer'
5
5
  require 'kpeg/code_generator'
6
6
  require 'stringio'
7
7
 
8
- class TestKPegRoundtrip < MiniTest::Unit::TestCase
8
+ class TestKPegFormatParserRoundtrip < MiniTest::Unit::TestCase
9
9
  PATH = File.expand_path("../../lib/kpeg/format_parser.kpeg", __FILE__)
10
10
  def test_roundtrip
11
11
  data = File.read(PATH)
@@ -4,8 +4,52 @@ require 'kpeg/format_parser'
4
4
  require 'kpeg/code_generator'
5
5
  require 'stringio'
6
6
 
7
- class TestKPegCodeGenerator < MiniTest::Unit::TestCase
8
- GRAMMAR = <<-'STR'
7
+ class TestKpegGrammar < MiniTest::Unit::TestCase
8
+ LEFT_RECURSION = <<-'STR'
9
+
10
+ name = name:n "[]" { [:array, n] }
11
+ | < /\w+/ > { [:word, text] }
12
+
13
+ root = name
14
+
15
+ STR
16
+
17
+ def test_left_recursion_invoke_rule_directly
18
+ parc = KPeg::FormatParser.new(LEFT_RECURSION)
19
+ assert parc.parse, "Unable to parse"
20
+
21
+ gram = parc.grammar
22
+
23
+ # gr = KPeg::GrammarRenderer.new(gram)
24
+ # puts
25
+ # gr.render(STDOUT)
26
+
27
+ cg = KPeg::CodeGenerator.new "TestCalc", gram
28
+
29
+ code = cg.make("blah[]")
30
+ assert_equal true, code.parse("name")
31
+ assert_equal [:array, [:word, "blah"]], code.result
32
+ end
33
+
34
+ def test_left_recursion_invoke_rule_via_another
35
+ parc = KPeg::FormatParser.new(LEFT_RECURSION)
36
+ assert parc.parse, "Unable to parse"
37
+
38
+ gram = parc.grammar
39
+
40
+ # gr = KPeg::GrammarRenderer.new(gram)
41
+ # puts
42
+ # gr.render(STDOUT)
43
+
44
+ cg = KPeg::CodeGenerator.new "TestCalc", gram
45
+
46
+ code = cg.make("blah[]")
47
+ assert_equal true, code.parse("root")
48
+ assert_equal [:array, [:word, "blah"]], code.result
49
+ end
50
+
51
+ def test_gen_calc
52
+ parc = KPeg::FormatParser.new(<<-'STR')
9
53
  Stmt = - Expr:e EOL { @answers << e }
10
54
  | ( !EOL . )* EOL { puts "error" }
11
55
 
@@ -41,9 +85,6 @@ EOL = ('\n' | '\r\n' | '\r' | ';') -
41
85
 
42
86
  root = Stmt+
43
87
  STR
44
-
45
- def test_parse
46
- parc = KPeg::FormatParser.new(GRAMMAR)
47
88
  assert parc.parse, "Unable to parse"
48
89
 
49
90
  gram = parc.grammar
@@ -60,4 +101,6 @@ root = Stmt+
60
101
  assert_equal true, code.parse
61
102
  assert_equal [7,56,119], code.instance_variable_get(:@answers)
62
103
  end
104
+
63
105
  end
106
+
@@ -115,8 +115,6 @@ class TestKPegGrammarRenderer < MiniTest::Unit::TestCase
115
115
  g.root = g.term
116
116
  end
117
117
 
118
- m = KPeg.match "4*3-8/9", gram
119
-
120
118
  io = StringIO.new
121
119
  gr = KPeg::GrammarRenderer.new(gram)
122
120
  gr.render(io)
@@ -151,8 +149,6 @@ root = term
151
149
  g.root = g.term
152
150
  end
153
151
 
154
- m = KPeg.match "4*3-8/9", gram
155
-
156
152
  io = StringIO.new
157
153
  gr = KPeg::GrammarRenderer.new(gram)
158
154
  gr.render(io)
@@ -203,6 +199,31 @@ root = < [a-z]+ >
203
199
  assert_equal expected, io.string
204
200
  end
205
201
 
202
+ def test_directives
203
+ gram = KPeg.grammar do |g|
204
+ g.root = g.dot
205
+ g.add_directive "header", g.action("\n# coding: UTF-8\n")
206
+ g.add_directive "footer", g.action("\nrequire 'something'\n")
207
+ end
208
+
209
+ io = StringIO.new
210
+ gr = KPeg::GrammarRenderer.new(gram)
211
+ gr.render(io)
212
+
213
+ expected = <<-TXT
214
+ %% footer {
215
+ require 'something'
216
+ }
217
+
218
+ %% header {
219
+ # coding: UTF-8
220
+ }
221
+
222
+ root = .
223
+ TXT
224
+ assert_equal expected, io.string
225
+ end
226
+
206
227
  def test_setup_actions
207
228
  gram = KPeg.grammar do |g|
208
229
  g.root = g.dot
@@ -220,7 +241,27 @@ root = .
220
241
  TXT
221
242
  assert_equal expected, io.string
222
243
  end
223
-
244
+
245
+ def test_variables
246
+ gram = KPeg.grammar do |g|
247
+ g.root = g.dot
248
+ g.set_variable "name", "Foo"
249
+ g.set_variable "custom_initialize", "true"
250
+ end
251
+
252
+ io = StringIO.new
253
+ gr = KPeg::GrammarRenderer.new(gram)
254
+ gr.render(io)
255
+
256
+ expected = <<-TXT
257
+ %% custom_initialize = true
258
+ %% name = Foo
259
+
260
+ root = .
261
+ TXT
262
+ assert_equal expected, io.string
263
+ end
264
+
224
265
  def test_multiple_render
225
266
  gram = KPeg.grammar do |g|
226
267
  g.root = g.multiple("a", 3, 5)
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kpeg
3
3
  version: !ruby/object:Gem::Version
4
- hash: 59
4
+ hash: 55
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 9
8
+ - 10
9
9
  - 0
10
- version: 0.9.0
10
+ version: 0.10.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Evan Phoenix
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-03-07 00:00:00 Z
18
+ date: 2012-04-16 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: minitest
@@ -23,14 +23,13 @@ dependencies:
23
23
  requirement: &id001 !ruby/object:Gem::Requirement
24
24
  none: false
25
25
  requirements:
26
- - - ">="
26
+ - - ~>
27
27
  - !ruby/object:Gem::Version
28
- hash: 37
28
+ hash: 27
29
29
  segments:
30
30
  - 2
31
- - 11
32
- - 3
33
- version: 2.11.3
31
+ - 12
32
+ version: "2.12"
34
33
  type: :development
35
34
  version_requirements: *id001
36
35
  - !ruby/object:Gem::Dependency
@@ -56,11 +55,11 @@ dependencies:
56
55
  requirements:
57
56
  - - ~>
58
57
  - !ruby/object:Gem::Version
59
- hash: 27
58
+ hash: 35
60
59
  segments:
61
60
  - 2
62
- - 12
63
- version: "2.12"
61
+ - 16
62
+ version: "2.16"
64
63
  type: :development
65
64
  version_requirements: *id003
66
65
  description: |-
@@ -80,9 +79,9 @@ extensions: []
80
79
  extra_rdoc_files:
81
80
  - History.txt
82
81
  - Manifest.txt
82
+ - README.rdoc
83
83
  files:
84
84
  - .autotest
85
- - Gemfile
86
85
  - History.txt
87
86
  - LICENSE
88
87
  - Manifest.txt
@@ -118,14 +117,13 @@ files:
118
117
  - lib/kpeg/string_escape.kpeg
119
118
  - lib/kpeg/string_escape.rb
120
119
  - test/inputs/comments.kpeg
121
- - test/test_file_parser_roundtrip.rb
122
- - test/test_gen_calc.rb
123
120
  - test/test_kpeg.rb
124
121
  - test/test_kpeg_code_generator.rb
125
122
  - test/test_kpeg_compiled_parser.rb
126
123
  - test/test_kpeg_format.rb
124
+ - test/test_kpeg_format_parser_round_trip.rb
125
+ - test/test_kpeg_grammar.rb
127
126
  - test/test_kpeg_grammar_renderer.rb
128
- - test/test_left_recursion.rb
129
127
  - vim/syntax_kpeg/ftdetect/kpeg.vim
130
128
  - vim/syntax_kpeg/syntax/kpeg.vim
131
129
  - .gemtest
@@ -159,16 +157,15 @@ required_rubygems_version: !ruby/object:Gem::Requirement
159
157
  requirements: []
160
158
 
161
159
  rubyforge_project: kpeg
162
- rubygems_version: 1.8.17
160
+ rubygems_version: 1.8.22
163
161
  signing_key:
164
162
  specification_version: 3
165
163
  summary: KPeg is a simple PEG library for Ruby
166
164
  test_files:
167
- - test/test_file_parser_roundtrip.rb
168
- - test/test_gen_calc.rb
169
165
  - test/test_kpeg.rb
170
166
  - test/test_kpeg_code_generator.rb
171
167
  - test/test_kpeg_compiled_parser.rb
172
168
  - test/test_kpeg_format.rb
169
+ - test/test_kpeg_format_parser_round_trip.rb
170
+ - test/test_kpeg_grammar.rb
173
171
  - test/test_kpeg_grammar_renderer.rb
174
- - test/test_left_recursion.rb
data/Gemfile DELETED
@@ -1,12 +0,0 @@
1
- # -*- ruby -*-
2
-
3
- # DO NOT EDIT THIS FILE. Instead, edit Rakefile, and run `rake bundler:gemfile`.
4
-
5
- source :gemcutter
6
-
7
-
8
- gem "minitest", "~>2.11", :group => [:development, :test]
9
- gem "rdoc", "~>3.10", :group => [:development, :test]
10
- gem "hoe", "~>2.15", :group => [:development, :test]
11
-
12
- # vim: syntax=ruby
@@ -1,50 +0,0 @@
1
- require 'minitest/autorun'
2
- require 'kpeg'
3
- require 'kpeg/format_parser'
4
- require 'kpeg/code_generator'
5
- require 'stringio'
6
-
7
- class TestKPegLeftRecursion < MiniTest::Unit::TestCase
8
- GRAMMAR = <<-'STR'
9
-
10
- name = name:n "[]" { [:array, n] }
11
- | < /\w+/ > { [:word, text] }
12
-
13
- root = name
14
-
15
- STR
16
-
17
- def test_invoke_rule_directly
18
- parc = KPeg::FormatParser.new(GRAMMAR)
19
- assert parc.parse, "Unable to parse"
20
-
21
- gram = parc.grammar
22
-
23
- # gr = KPeg::GrammarRenderer.new(gram)
24
- # puts
25
- # gr.render(STDOUT)
26
-
27
- cg = KPeg::CodeGenerator.new "TestCalc", gram
28
-
29
- code = cg.make("blah[]")
30
- assert_equal true, code.parse("name")
31
- assert_equal [:array, [:word, "blah"]], code.result
32
- end
33
-
34
- def test_invoke_rule_via_another
35
- parc = KPeg::FormatParser.new(GRAMMAR)
36
- assert parc.parse, "Unable to parse"
37
-
38
- gram = parc.grammar
39
-
40
- # gr = KPeg::GrammarRenderer.new(gram)
41
- # puts
42
- # gr.render(STDOUT)
43
-
44
- cg = KPeg::CodeGenerator.new "TestCalc", gram
45
-
46
- code = cg.make("blah[]")
47
- assert_equal true, code.parse("root")
48
- assert_equal [:array, [:word, "blah"]], code.result
49
- end
50
- end