genmachine 0.1.4 → 0.1.6

Sign up to get free protection for your applications and to get access to all the features.
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: