genmachine 0.1.4 → 0.1.6
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.
- data/TODO +6 -0
- data/VERSION +1 -1
- data/genmachine.gemspec +1 -1
- data/lib/VERSION +1 -1
- data/lib/genmachine/generators/helpers/ruby.rb +1 -1
- data/lib/genmachine/generators/templates/ruby/lib.erb.rb +17 -7
- metadata +7 -7
data/TODO
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
|
2
|
+
- `<<` always clears the source (doesn't have to literally for `c`) - so no <<<
|
3
|
+
- Allow `<<b` etc. in statements for throwing away values
|
4
|
+
- highlight `c` specially
|
5
|
+
- Allow `b<<` etc. in statements - implied 'c' source
|
6
|
+
|
1
7
|
- mechanism for simple nondeterminism
|
2
8
|
- syn highlight
|
3
9
|
- parser generator implementation notes / examples
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.6
|
data/genmachine.gemspec
CHANGED
data/lib/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.6
|
@@ -9,6 +9,16 @@ module <%= @classname %>
|
|
9
9
|
def <<(kv) k,v = kv; self[k] = v end
|
10
10
|
end
|
11
11
|
|
12
|
+
class UString < String
|
13
|
+
def <<(v)
|
14
|
+
begin
|
15
|
+
super([v].pack('U*'))
|
16
|
+
rescue
|
17
|
+
super(v)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
12
22
|
class UNode
|
13
23
|
attr_accessor :name, :m,:a,:c
|
14
24
|
def initialize(params={})
|
@@ -51,10 +61,10 @@ module <%= @classname %>
|
|
51
61
|
b = source
|
52
62
|
source =
|
53
63
|
case
|
54
|
-
when b.size >= 4 && b[0] == 0 && b[1] == 0 && b[2] == 0;
|
55
|
-
when b.size >= 4 && b[0] == 0 && b[2] == 0;
|
56
|
-
when b.size >= 4 && b[1] == 0 && b[2] == 0 && b[3] == 0;
|
57
|
-
when b.size >= 4 && b[1] == 0 && b[3] == 0;
|
64
|
+
when b.size >= 4 && b[0] == 0 && b[1] == 0 && b[2] == 0; Iconv.iconv('utf-8', 'utf-32be', b)
|
65
|
+
when b.size >= 4 && b[0] == 0 && b[2] == 0; Iconv.iconv('utf-8', 'utf-16be', b)
|
66
|
+
when b.size >= 4 && b[1] == 0 && b[2] == 0 && b[3] == 0; Iconv.iconv('utf-8', 'utf-32le', b)
|
67
|
+
when b.size >= 4 && b[1] == 0 && b[3] == 0; Iconv.iconv('utf-8', 'utf-16le', b)
|
58
68
|
else b end
|
59
69
|
end
|
60
70
|
return source
|
@@ -86,12 +96,12 @@ module <%= @classname %>
|
|
86
96
|
@last_is_newline = true; @line += 1; @pos = 1
|
87
97
|
@leading = true; @indent = 0
|
88
98
|
when 0x0a
|
89
|
-
nc = peek(
|
99
|
+
nc = peek(4).unpack('U')[0]
|
90
100
|
if nc == 0x0d then getch; c = "\n\r" end
|
91
101
|
@last_is_newline = true; @line += 1; @pos = 1
|
92
102
|
@leading = true; @indent = 0
|
93
103
|
when 0x0d
|
94
|
-
nc = peek(
|
104
|
+
nc = peek(4).unpack('U')[0]
|
95
105
|
if nc == 0x0a then getch; c = "\r\n" end
|
96
106
|
@last_is_newline = true; @line += 1; @pos = 1
|
97
107
|
@leading = true; @indent = 0
|
@@ -138,7 +148,7 @@ module <%= @classname %>
|
|
138
148
|
<%- end -%>
|
139
149
|
<%- end -%>
|
140
150
|
<%- accumulators(states).each do |_acc| -%>
|
141
|
-
<%= _acc %> ||=
|
151
|
+
<%= _acc %> ||= UString.new
|
142
152
|
<%- end -%>
|
143
153
|
loop do
|
144
154
|
c = nextchar
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: genmachine
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 23
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 6
|
10
|
+
version: 0.1.6
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Joseph Wecker
|
@@ -19,6 +19,7 @@ date: 2011-08-18 00:00:00 -07:00
|
|
19
19
|
default_executable: genmachine
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
|
+
type: :development
|
22
23
|
requirement: &id001 !ruby/object:Gem::Requirement
|
23
24
|
none: false
|
24
25
|
requirements:
|
@@ -31,8 +32,8 @@ dependencies:
|
|
31
32
|
name: shoulda
|
32
33
|
version_requirements: *id001
|
33
34
|
prerelease: false
|
34
|
-
type: :development
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
|
+
type: :development
|
36
37
|
requirement: &id002 !ruby/object:Gem::Requirement
|
37
38
|
none: false
|
38
39
|
requirements:
|
@@ -47,8 +48,8 @@ dependencies:
|
|
47
48
|
name: bundler
|
48
49
|
version_requirements: *id002
|
49
50
|
prerelease: false
|
50
|
-
type: :development
|
51
51
|
- !ruby/object:Gem::Dependency
|
52
|
+
type: :development
|
52
53
|
requirement: &id003 !ruby/object:Gem::Requirement
|
53
54
|
none: false
|
54
55
|
requirements:
|
@@ -63,8 +64,8 @@ dependencies:
|
|
63
64
|
name: jeweler
|
64
65
|
version_requirements: *id003
|
65
66
|
prerelease: false
|
66
|
-
type: :development
|
67
67
|
- !ruby/object:Gem::Dependency
|
68
|
+
type: :development
|
68
69
|
requirement: &id004 !ruby/object:Gem::Requirement
|
69
70
|
none: false
|
70
71
|
requirements:
|
@@ -77,7 +78,6 @@ dependencies:
|
|
77
78
|
name: rcov
|
78
79
|
version_requirements: *id004
|
79
80
|
prerelease: false
|
80
|
-
type: :development
|
81
81
|
description: "Takes a state table where the following are defined: state, input+conditions, accumulate-action, pre-transition-actions, and transition-to. It takes that state table and generates very fast parsers. Similar to Ragel. Currently only outputs pure Ruby."
|
82
82
|
email: joseph.wecker@gmail.com
|
83
83
|
executables:
|