waxeye 0.5.0 → 0.6.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.
- data/README +15 -6
- data/lib/waxeye.rb +16 -14
- metadata +2 -2
data/README
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
|
2
2
|
============================================
|
3
3
|
| Waxeye Parser Generator |
|
4
|
-
| v 0.
|
4
|
+
| v 0.6.0 |
|
5
5
|
| www.waxeye.org |
|
6
6
|
| Copyright (C) 2008 Orlando D. A. R. Hill |
|
7
7
|
============================================
|
@@ -31,6 +31,7 @@ Features
|
|
31
31
|
* Automatic AST Generation
|
32
32
|
|
33
33
|
* Choice of Programming Language
|
34
|
+
- C
|
34
35
|
- Java
|
35
36
|
- Ruby
|
36
37
|
- Scheme
|
@@ -65,7 +66,7 @@ Windows:
|
|
65
66
|
Building
|
66
67
|
========
|
67
68
|
|
68
|
-
1. Install MzScheme
|
69
|
+
1. Install MzScheme v4; either with DrScheme or alone.
|
69
70
|
http://download.plt-scheme.org
|
70
71
|
|
71
72
|
2. Install Waxeye's backend for PLT Scheme.
|
@@ -81,9 +82,15 @@ Building
|
|
81
82
|
./build/unix
|
82
83
|
|
83
84
|
Windows:
|
84
|
-
|
85
|
-
|
86
|
-
|
85
|
+
|
86
|
+
- If your PLT-Scheme installation isn't 'C:\Program Files\PLT' then you will
|
87
|
+
need to modify 'build\exe.bat' to use the correct path.
|
88
|
+
|
89
|
+
- From your Waxeye installation directory, run the 'build\exe.bat' script in a
|
90
|
+
command prompt.
|
91
|
+
|
92
|
+
- When the script has finished, press 'y' then 'Enter' to remove the
|
93
|
+
temporary files.
|
87
94
|
|
88
95
|
|
89
96
|
Running
|
@@ -93,7 +100,9 @@ Unix, OSX:
|
|
93
100
|
Use 'waxeye'.
|
94
101
|
|
95
102
|
Windows:
|
96
|
-
Use a command prompt to run `waxeye.exe`.
|
103
|
+
Use a command prompt to run `waxeye.exe`. Note: If using the interpreter under
|
104
|
+
Windows, you will need to press 'Ctrl-z' and then 'Enter' after the input you
|
105
|
+
want to interpret.
|
97
106
|
|
98
107
|
|
99
108
|
License
|
data/lib/waxeye.rb
CHANGED
@@ -50,15 +50,16 @@ module Waxeye
|
|
50
50
|
end
|
51
51
|
|
52
52
|
class ParseError
|
53
|
-
attr_reader :pos, :line, :col
|
54
|
-
def initialize(pos, line, col)
|
53
|
+
attr_reader :pos, :line, :col, :nt
|
54
|
+
def initialize(pos, line, col, nt)
|
55
55
|
@pos = pos
|
56
56
|
@line = line
|
57
57
|
@col = col
|
58
|
+
@nt = nt
|
58
59
|
end
|
59
60
|
|
60
61
|
def display()
|
61
|
-
print "parse error
|
62
|
+
print "parse error: failed to match '#{nt}' at line=#{line}, col=#{col}, pos=#{pos}\n"
|
62
63
|
end
|
63
64
|
end
|
64
65
|
|
@@ -132,17 +133,18 @@ module Waxeye
|
|
132
133
|
@line_counting = line_counting
|
133
134
|
@tab_width = tab_width
|
134
135
|
@automata = automata
|
135
|
-
@
|
136
|
+
@fa_stack = []
|
136
137
|
@cache = {}
|
137
138
|
@input = input
|
138
139
|
@input_len = input.length
|
139
140
|
@input_pos = 0
|
140
|
-
@line =
|
141
|
+
@line = 1
|
141
142
|
@column = 0
|
142
143
|
@last_cr = false
|
143
144
|
@error_pos = 0
|
144
|
-
@error_line =
|
145
|
+
@error_line = 1
|
145
146
|
@error_col = 0
|
147
|
+
@error_nt = @automata[start].type
|
146
148
|
end
|
147
149
|
|
148
150
|
def parse()
|
@@ -166,12 +168,11 @@ module Waxeye
|
|
166
168
|
start_cr = @last_cr
|
167
169
|
automaton = @automata[index]
|
168
170
|
type = automaton.type
|
169
|
-
states = automaton.states
|
170
171
|
mode = automaton.mode
|
171
172
|
|
172
|
-
@
|
173
|
+
@fa_stack.push(automaton)
|
173
174
|
res = match_state(0)
|
174
|
-
@
|
175
|
+
@fa_stack.pop()
|
175
176
|
|
176
177
|
value = if type == :_and
|
177
178
|
restore_pos(start_pos, start_line, start_col, start_cr)
|
@@ -195,10 +196,10 @@ module Waxeye
|
|
195
196
|
when 1
|
196
197
|
res[0]
|
197
198
|
else
|
198
|
-
AST.new(type, res,
|
199
|
+
AST.new(type, res, [start_pos, @input_pos])
|
199
200
|
end
|
200
201
|
else
|
201
|
-
AST.new(type, res,
|
202
|
+
AST.new(type, res, [start_pos, @input_pos])
|
202
203
|
end
|
203
204
|
else
|
204
205
|
update_error()
|
@@ -210,7 +211,7 @@ module Waxeye
|
|
210
211
|
end
|
211
212
|
|
212
213
|
def match_state(index)
|
213
|
-
state = @
|
214
|
+
state = @fa_stack.last.states[index]
|
214
215
|
res = match_edges(state.edges)
|
215
216
|
res ? res : (state.match and [])
|
216
217
|
end
|
@@ -271,6 +272,7 @@ module Waxeye
|
|
271
272
|
@error_pos = @input_pos
|
272
273
|
@error_line = @line
|
273
274
|
@error_col = @column
|
275
|
+
@error_nt = @fa_stack.last.type
|
274
276
|
end
|
275
277
|
false
|
276
278
|
end
|
@@ -302,13 +304,13 @@ module Waxeye
|
|
302
304
|
if res
|
303
305
|
if @eof_check and @input_pos < @input_len
|
304
306
|
# Create a parse error - Not all input consumed
|
305
|
-
ParseError.new(@error_pos, @error_line, @error_col)
|
307
|
+
ParseError.new(@error_pos, @error_line, @error_col, @error_nt)
|
306
308
|
else
|
307
309
|
res
|
308
310
|
end
|
309
311
|
else
|
310
312
|
# Create a parse error
|
311
|
-
ParseError.new(@error_pos, @error_line, @error_col)
|
313
|
+
ParseError.new(@error_pos, @error_line, @error_col, @error_nt)
|
312
314
|
end
|
313
315
|
end
|
314
316
|
|
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.
|
4
|
+
version: 0.6.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-
|
12
|
+
date: 2008-11-17 00:00:00 +01:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|