waxeye 0.6.0 → 0.7.0

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.
Files changed (3) hide show
  1. data/README +2 -1
  2. data/lib/waxeye.rb +39 -39
  3. metadata +3 -3
data/README CHANGED
@@ -1,7 +1,7 @@
1
1
 
2
2
  ============================================
3
3
  | Waxeye Parser Generator |
4
- | v 0.6.0 |
4
+ | v 0.7.0 |
5
5
  | www.waxeye.org |
6
6
  | Copyright (C) 2008 Orlando D. A. R. Hill |
7
7
  ============================================
@@ -33,6 +33,7 @@ Features
33
33
  * Choice of Programming Language
34
34
  - C
35
35
  - Java
36
+ - Python
36
37
  - Ruby
37
38
  - Scheme
38
39
 
data/lib/waxeye.rb CHANGED
@@ -40,7 +40,7 @@ module Waxeye
40
40
  end
41
41
  end
42
42
 
43
- class Automaton
43
+ class FA
44
44
  attr_reader :type, :states, :mode
45
45
  def initialize(type, states, mode)
46
46
  @type = type
@@ -58,8 +58,8 @@ module Waxeye
58
58
  @nt = nt
59
59
  end
60
60
 
61
- def display()
62
- print "parse error: failed to match '#{nt}' at line=#{line}, col=#{col}, pos=#{pos}\n"
61
+ def to_s()
62
+ "parse error: failed to match '#{nt}' at line=#{line}, col=#{col}, pos=#{pos}\n"
63
63
  end
64
64
  end
65
65
 
@@ -71,70 +71,68 @@ module Waxeye
71
71
  @pos = pos
72
72
  end
73
73
 
74
- def display_sexpr()
75
- display_sexpr_iter(self)
76
- print "\n"
74
+ def to_s_sexpr()
75
+ acc = []
76
+ display_sexpr_iter(self, acc)
77
+ acc.to_s
77
78
  end
78
79
 
79
- def display()
80
- display_iter(self, [0])
80
+ def to_s()
81
+ acc = []
82
+ to_s_iter(self, [0], acc)
83
+ acc.to_s
81
84
  end
82
85
 
83
86
  private
84
- def display_sexpr_iter(ast)
85
- print '('
86
- print ast.type
87
+ def to_s_sexpr_iter(ast, acc)
88
+ acc.push('(')
89
+ acc.push(ast.type)
87
90
  ast.children.each do |a|
88
- print " "
91
+ acc.push(" ")
89
92
  if a.is_a?(Waxeye::AST)
90
- display_sexpr_iter(a)
93
+ display_sexpr_iter(a, acc)
91
94
  else
92
- print a
95
+ acc.push(a)
93
96
  end
94
97
  end
95
- print ')'
98
+ acc.push(')')
96
99
  end
97
100
 
98
- def display_iter(ast, indent)
99
- (indent[0] - 1).times {|| print ' ' }
100
- print '-> ' if indent[0] > 0
101
- print ast.type, "\n"
102
- indent[0] = indent[0] + 1
101
+ def to_s_iter(ast, indent, acc)
102
+ (indent[0] - 1).times {|| acc.push(' ') }
103
+ acc.push('-> ') if indent[0] > 0
104
+ acc.push(ast.type)
105
+ indent[0] += 1
103
106
  ast.children.each do |a|
107
+ acc.push("\n")
104
108
  if a.is_a?(Waxeye::AST)
105
- display_iter(a, indent)
109
+ to_s_iter(a, indent, acc)
106
110
  else
107
- (indent[0] - 1).times {|| print ' ' }
108
- print '| ' if indent[0] > 0
109
- print a, "\n"
111
+ (indent[0] - 1).times {|| acc.push(' ') }
112
+ acc.push('| ') if indent[0] > 0
113
+ acc.push(a)
110
114
  end
111
115
  end
112
- indent[0] = indent[0] - 1
116
+ indent[0] -= 1
113
117
  end
114
118
  end
115
119
 
116
120
  class WaxeyeParser
117
- def initialize(start, eof_check, line_counting, tab_width, automata)
121
+ def initialize(start, eof_check, automata)
118
122
  @start = start
119
123
  @eof_check = eof_check
120
- @line_counting = line_counting
121
- @tab_width = tab_width
122
124
  @automata = automata
123
125
  end
124
126
 
125
127
  def parse(input)
126
- InnerParser.new(@start, @eof_check, @line_counting, @tab_width, @automata, input).parse()
128
+ InnerParser.new(@start, @eof_check, @automata, input).parse()
127
129
  end
128
130
 
129
131
  class InnerParser
130
- def initialize(start, eof_check, line_counting, tab_width, automata, input)
132
+ def initialize(start, eof_check, automata, input)
131
133
  @start = start
132
134
  @eof_check = eof_check
133
- @line_counting = line_counting
134
- @tab_width = tab_width
135
135
  @automata = automata
136
- @fa_stack = []
137
- @cache = {}
138
136
  @input = input
139
137
  @input_len = input.length
140
138
  @input_pos = 0
@@ -144,7 +142,9 @@ module Waxeye
144
142
  @error_pos = 0
145
143
  @error_line = 1
146
144
  @error_col = 0
147
- @error_nt = @automata[start].type
145
+ @error_nt = automata[start].type
146
+ @fa_stack = []
147
+ @cache = {}
148
148
  end
149
149
 
150
150
  def parse()
@@ -279,20 +279,20 @@ module Waxeye
279
279
 
280
280
  def mv()
281
281
  ch = @input[@input_pos].chr()
282
- @input_pos = @input_pos + 1
282
+ @input_pos += 1
283
283
 
284
284
  if ch == '\r'
285
- @line = @line + 1
285
+ @line += 1
286
286
  @column = 0
287
287
  @last_cr = true
288
288
  else
289
289
  if ch == '\n'
290
290
  if not @last_cr
291
- @line = @line + 1
291
+ @line += 1
292
292
  @column = 0
293
293
  end
294
294
  else
295
- @column = @column + 1
295
+ @column += 1
296
296
  end
297
297
  @last_cr = false
298
298
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: waxeye
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Orlando D. A. R. Hill
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-11-17 00:00:00 +01:00
12
+ date: 2008-11-23 00:00:00 +01:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -50,6 +50,6 @@ rubyforge_project: waxeye
50
50
  rubygems_version: 1.1.1
51
51
  signing_key:
52
52
  specification_version: 2
53
- summary: The Ruby runtime for Waxeye parsers
53
+ summary: Ruby runtime for the Waxeye Parser Generator
54
54
  test_files: []
55
55