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 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.4
1
+ 0.1.6
data/genmachine.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{genmachine}
8
- s.version = "0.1.4"
8
+ s.version = "0.1.6"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Joseph Wecker"]
data/lib/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.4
1
+ 0.1.6
@@ -108,7 +108,7 @@ module GenMachine
108
108
  value = rb_vars(value)
109
109
  if clear_it
110
110
  out = ["(#{into}<<#{value} if #{value}.size>0)"]
111
- out << "#{value}=''"
111
+ out << "#{value}=UString.new"
112
112
  else
113
113
  out = ["#{into}<<#{value}"]
114
114
  end
@@ -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; JSON.iconv('utf-8', 'utf-32be', b)
55
- when b.size >= 4 && b[0] == 0 && b[2] == 0; JSON.iconv('utf-8', 'utf-16be', b)
56
- when b.size >= 4 && b[1] == 0 && b[2] == 0 && b[3] == 0; JSON.iconv('utf-8', 'utf-32le', b)
57
- when b.size >= 4 && b[1] == 0 && b[3] == 0; JSON.iconv('utf-8', 'utf-16le', b)
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(1).unpack('U')[0]
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(1).unpack('U')[0]
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: 19
4
+ hash: 23
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 4
10
- version: 0.1.4
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: