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