genmachine 0.2.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
data/TODO CHANGED
@@ -1,6 +1,11 @@
1
+ - Fix "unexpected ..." so it works again
2
+ - Automatically put {eof?} (by itself) clauses at beginning
3
+ - Get per-state eof? detection working again (for final else clause)
4
+
1
5
  - highlight `c` specially
2
6
  - Allow `b<<` etc. in statements - implied 'c' source
3
7
 
8
+
4
9
  - mechanism for simple nondeterminism
5
10
  - syn highlight
6
11
  - parser generator implementation notes / examples
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.1
1
+ 0.2.2
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.2.1"
8
+ s.version = "0.2.2"
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.2.1
1
+ 0.2.2
@@ -33,7 +33,7 @@ module GenMachine
33
33
  exprs = c[:exprs].dup
34
34
  exprs << c[:acc].dup
35
35
  exprs.each do |e|
36
- if e =~ /^([a-zA-Z_][a-zA-Z0-9_]*)?\s*>>\s*([a-zA-Z_][a-zA-Z0-9_]*)?$/
36
+ if e =~ /^([a-zA-Z_][a-zA-Z0-9_]*)?\s*>>>?\s*([a-zA-Z_][a-zA-Z0-9_]*)?$/
37
37
  accs[$1]=true unless ($1.nil? or $1 == '' or $1 == 'p' or $1 == 's')
38
38
  accs[$3]=true unless ($3.nil? or $3 == '' or $3 == 'p' or $3 == 's')
39
39
  end
@@ -105,10 +105,12 @@ module GenMachine
105
105
  return ['@fwd=true']
106
106
  when acc_phrase.strip == '>>'
107
107
  return []
108
- when acc_phrase =~ /^\s*([a-zA-Z_][a-zA-Z0-9_]*)\s*>>\s*$/
108
+ when acc_phrase =~ /^\s*([a-zA-Z_][a-zA-Z0-9_.]*)\s*>>\s*$/
109
109
  return ["#{rb_vars($1)}.reset!"]
110
- when acc_phrase =~ /^\s*([a-zA-Z_][a-zA-Z0-9_]*)\s*>>\s*([a-zA-Z_][a-zA-Z0-9_]*)\s*$/
110
+ when acc_phrase =~ /^\s*([a-zA-Z_][a-zA-Z0-9_.]*)\s*>>\s*([a-zA-Z_][a-zA-Z0-9_.]*)\s*$/
111
111
  return ["#{rb_vars($1)}.into(#{rb_vars($2)})"]
112
+ when acc_phrase =~ /^\s*([a-zA-Z_][a-zA-Z0-9_.]*)\s*>>>\s*([a-zA-Z_][a-zA-Z0-9_.]*)\s*$/
113
+ return ["#{rb_vars($1)}.into!(#{rb_vars($2)})"]
112
114
  else raise("Can't figure out your accumulator statement: #{acc_phrase}")
113
115
  end
114
116
  end
@@ -3,6 +3,7 @@ $KCODE="U"
3
3
 
4
4
  class Integer
5
5
  def into(v); v << self end
6
+ def into!(v); into(v) end
6
7
  def reset!; :nop end
7
8
  def reset; :nop end
8
9
  end
@@ -13,15 +14,14 @@ module <%= @classname %>
13
14
 
14
15
 
15
16
  class UArray < Array
16
- def into(v)
17
- return if size == 0
18
- v << self
19
- end
17
+ def into(v); into!(v) unless size == 0 end
18
+ def into!(v); v << self end
20
19
  def reset!; self.clear end
21
20
  def reset; d=dup;d.reset!;d end
22
21
  end
23
22
 
24
23
  class UHash < Hash
24
+ def into!(v) v << self end
25
25
  def into(v) v << self end
26
26
  def <<(kv) k,v = kv; self[k] = v end
27
27
  def reset!; self.clear end
@@ -29,8 +29,8 @@ module <%= @classname %>
29
29
  end
30
30
 
31
31
  class UString < String
32
- def into(v)
33
- return if size == 0
32
+ def into(v); into!(v) unless size == 0 end
33
+ def into!(v)
34
34
  v << self.dup
35
35
  reset!
36
36
  end
@@ -53,6 +53,7 @@ module <%= @classname %>
53
53
  @c= params.delete(:c) || []
54
54
  @name = params.delete(:name)
55
55
  end
56
+ def into!(val) val << self end
56
57
  def into(val) val << self end
57
58
  def <<(val) @c<<val end
58
59
  def [](key) @c[key] end
@@ -157,7 +158,7 @@ module <%= @classname %>
157
158
 
158
159
  <%- @spec_ast.each do |name, otype, args, cmds, first_state, states| -%>
159
160
  <%- args << "p=nil" -%>
160
- <%- args << "name='#{name}'" -%>
161
+ <%- args << "name=UString.new('#{name}')" -%>
161
162
  def <%= name %>(<%= args.join(',') %>)
162
163
  <%- cmds.each do |c| -%>
163
164
  <%= rb_vars(c) %>
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: 21
4
+ hash: 19
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 2
9
- - 1
10
- version: 0.2.1
9
+ - 2
10
+ version: 0.2.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Joseph Wecker