ruco-cpp 0.2.6 → 0.2.7

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: 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
-