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 +4 -4
- data/lib/ruco/version.rb +1 -1
- data/lib/ruco.rb +50 -8
- metadata +15 -16
- data/ext/cocor/mkmf.log +0 -57
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9b331baee02e089e9653dab9371290ade59cb84a
|
4
|
+
data.tar.gz: d62e2a8b717d1adcc11923783252ee699895fbc8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c7ec2e512df2b42a1a560e698e2a3b10f8b7ee4e9ec2645d180dae319949a1d641280b1e43261d9f117e5e305eeb2c6e1972814af0bab466c9fced433154823a
|
7
|
+
data.tar.gz: b0ecaca02d60125ff492ff071b8afd162bc78c44318d879a6bb5cc7eac8d1e9d2896e92852d65c687f16b55b83fa962c05ece22db8b2b324c3a7f8df95b9384c
|
data/lib/ruco/version.rb
CHANGED
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
|
-
|
517
|
-
|
518
|
-
#{key.downcase} = Compile#{key}(pointer->#{key.downcase});
|
549
|
+
#{key.downcase} = Compile#{key}(pointer->#{key.downcase});
|
519
550
|
|
520
|
-
|
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}
|
564
|
+
picojson::array #{key.downcase.pluralize};
|
533
565
|
|
534
|
-
for(unsigned i=0; i<pointer->#{key.downcase}
|
566
|
+
for(unsigned i=0; i<pointer->#{key.downcase.pluralize}.size(); i++)
|
535
567
|
{
|
536
|
-
#{key.downcase}
|
568
|
+
#{key.downcase.pluralize}.push_back(picojson::value(Compile#{key}(pointer->#{key.downcase.pluralize}[i])));
|
537
569
|
}
|
538
570
|
|
539
|
-
object[L"#{key.downcase}
|
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.
|
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:
|
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.
|
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
|
-
|