ruco-cpp 0.2.6 → 0.2.7

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4494f4f761644cc7fc1e851c283d2900d68457c4
4
- data.tar.gz: 1ff4866a37ade60fa26623c7f95daf996bee14c0
3
+ metadata.gz: 9b331baee02e089e9653dab9371290ade59cb84a
4
+ data.tar.gz: d62e2a8b717d1adcc11923783252ee699895fbc8
5
5
  SHA512:
6
- metadata.gz: 8df637ba1c96dc874878c1fd96af9289e84d2d3c34f54fed71cb3ab682d71df8c54552fb96ed4f4910b5251a5f0acf222400531733aab5c2a13db2bd5cd7ecd7
7
- data.tar.gz: fd06382812ff16811298065bf94f243b08feebb785318a779963ada4eda4933dfd2f8846a73e10d0a783392bdf0843bf6b677f0b5cec49e6e040c6c4d7c1c757
6
+ metadata.gz: c7ec2e512df2b42a1a560e698e2a3b10f8b7ee4e9ec2645d180dae319949a1d641280b1e43261d9f117e5e305eeb2c6e1972814af0bab466c9fced433154823a
7
+ data.tar.gz: b0ecaca02d60125ff492ff071b8afd162bc78c44318d879a6bb5cc7eac8d1e9d2896e92852d65c687f16b55b83fa962c05ece22db8b2b324c3a7f8df95b9384c
data/lib/ruco/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Ruco
2
- VERSION = "0.2.6"
2
+ VERSION = "0.2.7"
3
3
  end
data/lib/ruco.rb CHANGED
@@ -128,6 +128,7 @@ module Ruco
128
128
  g.instance_eval do
129
129
  one thing
130
130
  end
131
+ g.multiply
131
132
  one g
132
133
  end
133
134
 
@@ -146,9 +147,21 @@ module Ruco
146
147
  end if options
147
148
  one thing
148
149
  end
150
+ g.multiply
149
151
  one g
150
152
  end
151
153
 
154
+ def multiply
155
+ @stuff.each do |x|
156
+ if x.is_a? Group
157
+ x.multiply
158
+ elsif x.is_a? LitString
159
+ else
160
+ @prodset[x.name][:count] += 1
161
+ end
162
+ end
163
+ end
164
+
152
165
  def group(&block)
153
166
  g = Group.new :normal, @prodset
154
167
  g.instance_eval(&block)
@@ -245,6 +258,14 @@ module Ruco
245
258
  p.instance_eval do
246
259
  one Token.new("integer", @prodset)
247
260
  end
261
+ when :string
262
+ p.instance_eval do
263
+ one Token.new("string", @prodset)
264
+ end
265
+ when :char
266
+ p.instance_eval do
267
+ one Token.new("char", @prodset)
268
+ end
248
269
  end
249
270
  @productions[name] = p
250
271
  end
@@ -379,6 +400,7 @@ PARENTDECL
379
400
  class #{prodname} #{parent_declaration}
380
401
  {
381
402
  public:
403
+ unsigned _line, _col;
382
404
  #{members}
383
405
  };
384
406
  typedef std::shared_ptr<#{prodname}> #{prodname}Ptr;
@@ -418,6 +440,7 @@ namespace #{@name}
418
440
  end
419
441
 
420
442
  def generate_libhpp()
443
+
421
444
  <<-HPPCONTENT
422
445
 
423
446
  #ifndef PARSE_#{@name.upcase}_HPP
@@ -443,6 +466,11 @@ namespace #{@name}
443
466
 
444
467
  namespace #{@name}
445
468
  {
469
+ /**
470
+ * Exception thrown when the specified source file is not found
471
+ */
472
+ class FileNotFoundException {};
473
+
446
474
  /**
447
475
  * Parses a source file into the data structure of #{@name}
448
476
  */
@@ -463,6 +491,8 @@ namespace #{@name}
463
491
 
464
492
  pset = <<-PSETEND
465
493
  object[L"_type"] = picojson::value(L"#{prodname}");
494
+ object[L"_col"] = picojson::value((double)pointer->_col);
495
+ object[L"_line"] = picojson::value((double)pointer->_line);
466
496
  PSETEND
467
497
 
468
498
  if prod.prodtype == :variation
@@ -512,12 +542,14 @@ namespace #{@name}
512
542
 
513
543
  elsif prodinfo[:type] == :id
514
544
  members_code += <<-PSETEND
545
+ if (pointer->#{key.downcase})
546
+ {
547
+ picojson::object #{key.downcase};
515
548
 
516
- picojson::object #{key.downcase};
517
-
518
- #{key.downcase} = Compile#{key}(pointer->#{key.downcase});
549
+ #{key.downcase} = Compile#{key}(pointer->#{key.downcase});
519
550
 
520
- object[L"#{key.downcase}"] = picojson::value(#{key.downcase});
551
+ object[L"#{key.downcase}"] = picojson::value(#{key.downcase});
552
+ }
521
553
  PSETEND
522
554
  end
523
555
 
@@ -529,14 +561,14 @@ namespace #{@name}
529
561
  elsif prodinfo[:type] == :id
530
562
  members_code += <<-PSETEND
531
563
 
532
- picojson::array #{key.downcase}s;
564
+ picojson::array #{key.downcase.pluralize};
533
565
 
534
- for(unsigned i=0; i<pointer->#{key.downcase}s.size(); i++)
566
+ for(unsigned i=0; i<pointer->#{key.downcase.pluralize}.size(); i++)
535
567
  {
536
- #{key.downcase}s.push_back(picojson::value(Compile#{key}(pointer->#{key.downcase}s[i])));
568
+ #{key.downcase.pluralize}.push_back(picojson::value(Compile#{key}(pointer->#{key.downcase.pluralize}[i])));
537
569
  }
538
570
 
539
- object[L"#{key.downcase}s"] = picojson::value(#{key.downcase}s);
571
+ object[L"#{key.downcase.pluralize}"] = picojson::value(#{key.downcase.pluralize});
540
572
  PSETEND
541
573
  end
542
574
 
@@ -600,6 +632,10 @@ namespace #{@name}
600
632
  #{@name}Ptr Parse(std::string sourceFile)
601
633
  {
602
634
  std::shared_ptr<FILE> fp (fopen(sourceFile.c_str(), "r"), fclose);
635
+ if (!fp)
636
+ {
637
+ throw FileNotFoundException();
638
+ }
603
639
  std::shared_ptr<Scanner> scanner (new Scanner(fp.get()));
604
640
  std::shared_ptr<Parser> parser (new Parser(scanner.get()));
605
641
  parser->Parse();
@@ -701,10 +737,16 @@ $(OUT)/%.o:%.cpp $(OUT)/%.d
701
737
 
702
738
  constructor = "(. production = std::make_shared<class #{prodname}>(); .)" if prod.prodtype == :normal
703
739
 
740
+ linecolreg = "(. unsigned curline = la->line, curcol = la->col; .)"
741
+
742
+ recordlinecol = "(. production->_line = curline; production->_col = curcol; .)"
743
+
704
744
  production_string = <<-PRODUCTION
705
745
  #{prodname}#{attributes} = #{constructor}
746
+ #{linecolreg}
706
747
  #{declarations}
707
748
  #{prod.generate}
749
+ #{recordlinecol}
708
750
  .
709
751
  PRODUCTION
710
752
 
metadata CHANGED
@@ -1,83 +1,83 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruco-cpp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.6
4
+ version: 0.2.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Siaw
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-15 00:00:00.000000000 Z
11
+ date: 2016-01-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '4.2'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '4.2'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: '1.10'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ~>
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '1.10'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ~>
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
47
  version: '10.0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ~>
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '10.0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rake-compiler
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ~>
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
61
  version: 0.9.5
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ~>
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: 0.9.5
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rspec
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ~>
73
+ - - "~>"
74
74
  - !ruby/object:Gem::Version
75
75
  version: '3.3'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ~>
80
+ - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '3.3'
83
83
  description: Generates an LL(1) parser for a grammar described in a .ruco file
@@ -162,7 +162,6 @@ files:
162
162
  - ext/cocor/cygBuild.bat
163
163
  - ext/cocor/extconf.rb
164
164
  - ext/cocor/mingwbuild.bat
165
- - ext/cocor/mkmf.log
166
165
  - ext/cocor/zipsources.bat
167
166
  - lib/cocor.rb
168
167
  - lib/ruco.rb
@@ -178,17 +177,17 @@ require_paths:
178
177
  - lib
179
178
  required_ruby_version: !ruby/object:Gem::Requirement
180
179
  requirements:
181
- - - '>='
180
+ - - ">="
182
181
  - !ruby/object:Gem::Version
183
182
  version: '2.0'
184
183
  required_rubygems_version: !ruby/object:Gem::Requirement
185
184
  requirements:
186
- - - '>='
185
+ - - ">="
187
186
  - !ruby/object:Gem::Version
188
187
  version: '0'
189
188
  requirements: []
190
189
  rubyforge_project:
191
- rubygems_version: 2.4.7
190
+ rubygems_version: 2.4.6
192
191
  signing_key:
193
192
  specification_version: 4
194
193
  summary: Boilerplate generator for Coco/R
data/ext/cocor/mkmf.log DELETED
@@ -1,57 +0,0 @@
1
- have_library: checking for main() in -lstdc++... -------------------- yes
2
-
3
- "gcc -o conftest -I/opt/chef/embedded/include/ruby-1.9.1/x86_64-darwin11.2.0 -I/opt/chef/embedded/include/ruby-1.9.1/ruby/backward -I/opt/chef/embedded/include/ruby-1.9.1 -I. -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -I/opt/chef/embedded/include -I/opt/chef/embedded/include -I/opt/chef/embedded/include/ncurses -arch x86_64 -O3 -g -pipe -Qunused-arguments -fno-common conftest.c -L. -L/opt/chef/embedded/lib -L/opt/chef/embedded/lib -L. -L/opt/chef/embedded/lib -arch x86_64 -L/opt/chef/embedded/lib -m64 -lruby.1.9.1 -lpthread -ldl -lobjc "
4
- checked program was:
5
- /* begin */
6
- 1: #include "ruby.h"
7
- 2:
8
- 3: int main(int argc, char **argv)
9
- 4: {
10
- 5: return 0;
11
- 6: }
12
- /* end */
13
-
14
- "gcc -o conftest -I/opt/chef/embedded/include/ruby-1.9.1/x86_64-darwin11.2.0 -I/opt/chef/embedded/include/ruby-1.9.1/ruby/backward -I/opt/chef/embedded/include/ruby-1.9.1 -I. -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -I/opt/chef/embedded/include -I/opt/chef/embedded/include -I/opt/chef/embedded/include/ncurses -arch x86_64 -O3 -g -pipe -Qunused-arguments -fno-common conftest.c -L. -L/opt/chef/embedded/lib -L/opt/chef/embedded/lib -L. -L/opt/chef/embedded/lib -arch x86_64 -L/opt/chef/embedded/lib -m64 -lruby.1.9.1 -lstdc++ -lpthread -ldl -lobjc "
15
- conftest.c:4:53: error: use of undeclared identifier 'main'
16
- int t() { void ((*volatile p)()); p = (void ((*)()))main; return 0; }
17
- ^
18
- 1 error generated.
19
- checked program was:
20
- /* begin */
21
- 1: #include "ruby.h"
22
- 2:
23
- 3: /*top*/
24
- 4: int t() { void ((*volatile p)()); p = (void ((*)()))main; return 0; }
25
- 5: int main(int argc, char **argv)
26
- 6: {
27
- 7: if (argc > 1000000) {
28
- 8: printf("%p", &t);
29
- 9: }
30
- 10:
31
- 11: return 0;
32
- 12: }
33
- /* end */
34
-
35
- "gcc -o conftest -I/opt/chef/embedded/include/ruby-1.9.1/x86_64-darwin11.2.0 -I/opt/chef/embedded/include/ruby-1.9.1/ruby/backward -I/opt/chef/embedded/include/ruby-1.9.1 -I. -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -I/opt/chef/embedded/include -I/opt/chef/embedded/include -I/opt/chef/embedded/include/ncurses -arch x86_64 -O3 -g -pipe -Qunused-arguments -fno-common conftest.c -L. -L/opt/chef/embedded/lib -L/opt/chef/embedded/lib -L. -L/opt/chef/embedded/lib -arch x86_64 -L/opt/chef/embedded/lib -m64 -lruby.1.9.1 -lstdc++ -lpthread -ldl -lobjc "
36
- conftest.c:4:11: warning: implicit declaration of function 'main' is invalid in C99 [-Wimplicit-function-declaration]
37
- int t() { main(); return 0; }
38
- ^
39
- 1 warning generated.
40
- checked program was:
41
- /* begin */
42
- 1: #include "ruby.h"
43
- 2:
44
- 3: /*top*/
45
- 4: int t() { main(); return 0; }
46
- 5: int main(int argc, char **argv)
47
- 6: {
48
- 7: if (argc > 1000000) {
49
- 8: printf("%p", &t);
50
- 9: }
51
- 10:
52
- 11: return 0;
53
- 12: }
54
- /* end */
55
-
56
- --------------------
57
-