depager 0.2.2 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. data/ChangeLog +4 -0
  2. data/README.ja +27 -28
  3. data/examples/c89/c89.dr +34 -34
  4. data/examples/c89/c89.tab.rb +3074 -3074
  5. data/examples/extension/paction.dr +4 -4
  6. data/examples/extension/pactiontest.dr +1 -1
  7. data/examples/pl0d/pl0ds.dr +27 -27
  8. data/examples/pl0d/pl0ds.tab.rb +626 -643
  9. data/examples/sample_calc/calc.action.dr +6 -6
  10. data/examples/sample_calc/calc.action.tab.rb +90 -90
  11. data/examples/sample_calc/calc.ast.action.dr +7 -7
  12. data/examples/sample_calc/calc.ast.action.tab.rb +121 -127
  13. data/examples/sample_calc/calc.ast.dr +6 -6
  14. data/examples/sample_calc/calc.ast.tab.rb +102 -109
  15. data/examples/sample_calc/calc.astdf.dr +6 -6
  16. data/examples/sample_calc/calc.astdf.tab.rb +102 -109
  17. data/examples/sample_calc/calc.atree.dr +6 -6
  18. data/examples/sample_calc/calc.atree.tab.rb +90 -90
  19. data/examples/sample_calc/calc.cst.dr +5 -5
  20. data/examples/sample_calc/calc.cst.tab.rb +106 -106
  21. data/examples/sample_calc/calc.dr +1 -1
  22. data/examples/sample_calc/calc.lex.dr +4 -4
  23. data/examples/sample_calc/calc.lex.tab.rb +73 -73
  24. data/examples/sample_calc/calc.nvaction.dr +6 -6
  25. data/examples/sample_calc/calc.nvaction.tab.rb +90 -90
  26. data/examples/sample_calc/calc.tab.rb +71 -71
  27. data/examples/sample_calc/calc_prec.nvaction.dr +6 -6
  28. data/examples/sample_calc/calc_prec.nvaction.tab.rb +46 -46
  29. data/examples/slex_test/divreg.slex.dr +7 -7
  30. data/examples/slex_test/divreg.slex.tab.rb +20 -20
  31. data/examples/slex_test/ljoin.slex.dr +7 -7
  32. data/examples/slex_test/ljoin.slex.tab.rb +15 -15
  33. data/lib/depager.rb +45 -83
  34. data/lib/depager/grammar.rb +3 -7
  35. data/lib/depager/lr.rb +123 -1
  36. data/lib/depager/parser.rb +29 -48
  37. data/lib/depager/{template/ast.erbs → ruby/plugins/_ast_tmpl.rb} +11 -7
  38. data/lib/depager/{action.rb → ruby/plugins/action.rb} +7 -11
  39. data/lib/depager/{ast.dr → ruby/plugins/ast.dr} +24 -25
  40. data/lib/depager/{ast.rb → ruby/plugins/ast.rb} +241 -243
  41. data/lib/depager/{astdf.rb → ruby/plugins/astdf.rb} +1 -2
  42. data/lib/depager/{atree.dr → ruby/plugins/atree.dr} +5 -5
  43. data/lib/depager/{atree.rb → ruby/plugins/atree.rb} +39 -39
  44. data/lib/depager/{cst.dr → ruby/plugins/cst.dr} +17 -21
  45. data/lib/depager/{cst.rb → ruby/plugins/cst.rb} +62 -68
  46. data/lib/depager/{lex.dr → ruby/plugins/lex.dr} +3 -4
  47. data/lib/depager/{lex.rb → ruby/plugins/lex.rb} +29 -31
  48. data/lib/depager/{nvaction.rb → ruby/plugins/nvaction.rb} +1 -3
  49. data/lib/depager/{slex.dr → ruby/plugins/slex.dr} +16 -17
  50. data/lib/depager/{slex.rb → ruby/plugins/slex.rb} +115 -117
  51. data/lib/depager/{srp.rb → ruby/plugins/srp.rb} +4 -4
  52. data/lib/depager/{template → ruby/templates}/extension_lalr_master.erb +6 -6
  53. data/lib/depager/{template → ruby/templates}/extension_lalr_slave.erb +0 -0
  54. data/lib/depager/{template → ruby/templates}/simple.erb +0 -0
  55. data/lib/depager/{template → ruby/templates}/single_lalr_parser.erb +0 -0
  56. data/lib/depager/utils.rb +30 -69
  57. data/lib/depager/version.rb +1 -1
  58. metadata +59 -56
  59. data/examples/Rakefile +0 -36
  60. data/lib/depager/Rakefile +0 -34
  61. data/lib/depager/lr_put_table.rb +0 -116
  62. data/lib/depager/parse_action.rb +0 -24
@@ -1,17 +1,17 @@
1
1
  %class StatefulLexerTest1
2
- %extend StatefulLexer ('depager/slex.rb')
3
- %extend NVAction ('depager/nvaction.rb')
2
+ %extend StatefulLexer ('plugins/slex.rb')
3
+ %extend NVAction ('plugins/nvaction.rb')
4
4
  %decorate @NVAction
5
5
  %decorate @StatefulLexer
6
- #%decorate ShiftReducePrinter ('depager/srp.rb')
6
+ #%decorate ShiftReducePrinter ('plugins/srp.rb')
7
7
  %%
8
8
  %LEX{
9
9
  <START>
10
10
  /\s+/ { }
11
- /\/(([^\/\\]+|\\.)*)\// { yield _Token(:REGEXP, $&) }
12
- /./ { yield _Token($&, $&) }
11
+ /\/(([^\/\\]+|\\.)*)\// { yield token(:REGEXP, $&) }
12
+ /./ { yield token($&, $&) }
13
13
  <OPMODE : START>
14
- '/' { yield _Token($&, $&) }
14
+ '/' { yield token($&, $&) }
15
15
  %}
16
16
 
17
17
  #begin-rule
@@ -26,4 +26,4 @@
26
26
  #end-rule
27
27
  %%
28
28
  p = createDecoratedStatefulLexerTest1
29
- p.yyparse(STDIN)
29
+ p.parse(STDIN)
@@ -19,8 +19,8 @@ class StatefulLexerTest1 < Depager::LALR::Basis
19
19
  ]
20
20
  ### Extension Params
21
21
  nparams = {
22
- 'StatefulLexer' => 2,
23
22
  'NVAction' => 3,
23
+ 'StatefulLexer' => 2,
24
24
  }
25
25
  ### Term to Int
26
26
  t2i = {
@@ -38,20 +38,20 @@ class StatefulLexerTest1 < Depager::LALR::Basis
38
38
  ]
39
39
  ### Action Table
40
40
  action_table = [
41
- [ nil, nil, nil, 3, ],
41
+ [ nil, nil, nil, 2, ],
42
42
  [ ACC, nil, 4, nil, ],
43
43
  [ nil, nil, nil, nil, ],
44
44
  [ nil, nil, nil, nil, ],
45
45
  [ nil, nil, nil, nil, ],
46
- [ nil, nil, nil, 3, ],
46
+ [ nil, nil, nil, 2, ],
47
47
  [ nil, nil, nil, nil, ],
48
48
  ]
49
49
  ### Default Reduce Table
50
50
  defred_table = [
51
51
  nil,
52
52
  nil,
53
- -2,
54
53
  -4,
54
+ -2,
55
55
  -3,
56
56
  nil,
57
57
  -1,
@@ -59,8 +59,8 @@ class StatefulLexerTest1 < Depager::LALR::Basis
59
59
  defred_after_shift_table = [
60
60
  nil,
61
61
  nil,
62
- -2,
63
62
  -4,
63
+ -2,
64
64
  -3,
65
65
  nil,
66
66
  -1,
@@ -79,7 +79,7 @@ class StatefulLexerTest1 < Depager::LALR::Basis
79
79
  ]
80
80
  ### Goto Table
81
81
  goto_table = [
82
- [ 1, 2, nil, ],
82
+ [ 1, 3, nil, ],
83
83
  [ nil, nil, nil, ],
84
84
  [ nil, nil, nil, ],
85
85
  [ nil, nil, nil, ],
@@ -101,7 +101,7 @@ class StatefulLexerTest1 < Depager::LALR::Basis
101
101
  I000 =
102
102
  ( 0) $start : _ expr
103
103
 
104
- REGEXP shift, and goto to state 3
104
+ REGEXP shift, and goto to state 2
105
105
 
106
106
 
107
107
  ----------
@@ -120,19 +120,19 @@ I001 =
120
120
 
121
121
  <<'----------',
122
122
  I002 =
123
- ( 2) expr : fact _
123
+ ( 4) fact : REGEXP _
124
124
 
125
125
 
126
- $default reduce using rule 2 (expr) [after shift]
126
+ $default reduce using rule 4 (fact) [after shift]
127
127
 
128
128
  ----------
129
129
 
130
130
  <<'----------',
131
131
  I003 =
132
- ( 4) fact : REGEXP _
132
+ ( 2) expr : fact _
133
133
 
134
134
 
135
- $default reduce using rule 4 (fact) [after shift]
135
+ $default reduce using rule 2 (expr) [after shift]
136
136
 
137
137
  ----------
138
138
 
@@ -149,7 +149,7 @@ I004 =
149
149
  I005 =
150
150
  ( 1) expr : expr '/' __expr_0_2__ _ fact
151
151
 
152
- REGEXP shift, and goto to state 3
152
+ REGEXP shift, and goto to state 2
153
153
 
154
154
 
155
155
  ----------
@@ -185,12 +185,12 @@ I006 =
185
185
 
186
186
  when /\A\/(([^\/\\]+|\\.)*)\//
187
187
  @oldline = @line; @line = $'
188
- yield _Token(:REGEXP, $&)
188
+ yield token(:REGEXP, $&)
189
189
 
190
190
 
191
191
  when /\A./
192
192
  @oldline = @line; @line = $'
193
- yield _Token($&, $&)
193
+ yield token($&, $&)
194
194
 
195
195
 
196
196
  else
@@ -203,7 +203,7 @@ I006 =
203
203
 
204
204
  when /\A\//
205
205
  @oldline = @line; @line = $'
206
- yield _Token($&, $&)
206
+ yield token($&, $&)
207
207
 
208
208
 
209
209
  else
@@ -229,7 +229,7 @@ end
229
229
 
230
230
  class D4StatefulLexerTest1::StatefulLexer < Depager::LALR::Action #:nodoc:all
231
231
  include Depager::DecoratorUtils
232
- []
232
+
233
233
  on_reduce = [
234
234
  nil,
235
235
  nil,
@@ -262,7 +262,7 @@ end
262
262
 
263
263
  class D4StatefulLexerTest1::NVAction < Depager::LALR::Action #:nodoc:all
264
264
  include Depager::DecoratorUtils
265
- []
265
+
266
266
  on_reduce = [
267
267
  nil,
268
268
  nil,
@@ -279,13 +279,13 @@ class D4StatefulLexerTest1::NVAction < Depager::LALR::Action #:nodoc:all
279
279
  end
280
280
 
281
281
 
282
- module_eval <<-'.,.,120998293627530.,.,', 'slex_test/divreg.slex.dr', 22
282
+ module_eval <<-'.,.,122745804061258.,.,', 'slex_test/divreg.slex.dr', 22
283
283
  def _act_3 val
284
284
  _REGEXP, = *val
285
285
  warn "REGEXP: #{_REGEXP.value}"
286
286
 
287
287
  end
288
- .,.,120998293627530.,.,
288
+ .,.,122745804061258.,.,
289
289
 
290
290
  end
291
291
 
@@ -298,6 +298,6 @@ end
298
298
  if __FILE__ == $0
299
299
  ### Main Code
300
300
  p = createDecoratedStatefulLexerTest1
301
- p.yyparse(STDIN)
301
+ p.parse(STDIN)
302
302
 
303
303
  end
@@ -1,16 +1,16 @@
1
1
  %class StatefulLexerTest2
2
- %extend StatefulLexer ('depager/slex.rb')
3
- %extend NVAction ('depager/nvaction.rb')
2
+ %extend StatefulLexer ('plugins/slex.rb')
3
+ %extend NVAction ('plugins/nvaction.rb')
4
4
  %decorate @NVAction
5
5
  %decorate @StatefulLexer
6
- #%decorate ShiftReducePrinter ('depager/srp.rb')
6
+ #%decorate ShiftReducePrinter ('plugins/srp.rb')
7
7
  %%
8
8
  %LEX{
9
9
  <START>
10
10
  /[ \t]+/ { }
11
- /\n/ { yield _Token(:EOL, $&) }
12
- /\w+/ { yield _Token(:ID, $&) }
13
- /./ { yield _Token($&, $&) }
11
+ /\n/ { yield token(:EOL, $&) }
12
+ /\w+/ { yield token(:ID, $&) }
13
+ /./ { yield token($&, $&) }
14
14
  <LCONT : START>
15
15
  /\r?\n/ { }
16
16
  %}
@@ -33,4 +33,4 @@
33
33
  #end-rule
34
34
  %%
35
35
  p = createDecoratedStatefulLexerTest2
36
- p.yyparse(STDIN)
36
+ p.parse(STDIN)
@@ -21,8 +21,8 @@ class StatefulLexerTest2 < Depager::LALR::Basis
21
21
  ]
22
22
  ### Extension Params
23
23
  nparams = {
24
- 'StatefulLexer' => 2,
25
24
  'NVAction' => 3,
25
+ 'StatefulLexer' => 2,
26
26
  }
27
27
  ### Term to Int
28
28
  t2i = {
@@ -219,17 +219,17 @@ I008 =
219
219
 
220
220
  when /\A\n/
221
221
  @oldline = @line; @line = $'
222
- yield _Token(:EOL, $&)
222
+ yield token(:EOL, $&)
223
223
 
224
224
 
225
225
  when /\A\w+/
226
226
  @oldline = @line; @line = $'
227
- yield _Token(:ID, $&)
227
+ yield token(:ID, $&)
228
228
 
229
229
 
230
230
  when /\A./
231
231
  @oldline = @line; @line = $'
232
- yield _Token($&, $&)
232
+ yield token($&, $&)
233
233
 
234
234
 
235
235
  else
@@ -268,7 +268,7 @@ end
268
268
 
269
269
  class D4StatefulLexerTest2::StatefulLexer < Depager::LALR::Action #:nodoc:all
270
270
  include Depager::DecoratorUtils
271
- []
271
+
272
272
  on_reduce = [
273
273
  nil,
274
274
  nil,
@@ -303,7 +303,7 @@ end
303
303
 
304
304
  class D4StatefulLexerTest2::NVAction < Depager::LALR::Action #:nodoc:all
305
305
  include Depager::DecoratorUtils
306
- []
306
+
307
307
  on_reduce = [
308
308
  nil,
309
309
  nil,
@@ -322,37 +322,37 @@ class D4StatefulLexerTest2::NVAction < Depager::LALR::Action #:nodoc:all
322
322
  end
323
323
 
324
324
 
325
- module_eval <<-'.,.,120998293621426.,.,', 'slex_test/ljoin.slex.dr', 19
325
+ module_eval <<-'.,.,12274580401395.,.,', 'slex_test/ljoin.slex.dr', 19
326
326
  def _act_1 val
327
327
  _stmts, _expr, _EOL, = *val
328
328
  warn "#{_expr} <EOL>:#{@lexstate}"
329
329
 
330
330
  end
331
- .,.,120998293621426.,.,
331
+ .,.,12274580401395.,.,
332
332
 
333
- module_eval <<-'.,.,120998293623094.,.,', 'slex_test/ljoin.slex.dr', 23
333
+ module_eval <<-'.,.,1227458040182.,.,', 'slex_test/ljoin.slex.dr', 23
334
334
  def _act_2 val
335
335
  _expr, _, ___expr_0_2__, _fact, = *val
336
336
  "#{_expr} + #{_fact}"
337
337
 
338
338
  end
339
- .,.,120998293623094.,.,
339
+ .,.,1227458040182.,.,
340
340
 
341
- module_eval <<-'.,.,120998293640556.,.,', 'slex_test/ljoin.slex.dr', 25
341
+ module_eval <<-'.,.,122745804061311.,.,', 'slex_test/ljoin.slex.dr', 25
342
342
  def _act_3 val
343
343
  _fact, = *val
344
344
  _fact
345
345
 
346
346
  end
347
- .,.,120998293640556.,.,
347
+ .,.,122745804061311.,.,
348
348
 
349
- module_eval <<-'.,.,120998293664604.,.,', 'slex_test/ljoin.slex.dr', 29
349
+ module_eval <<-'.,.,122745804033944.,.,', 'slex_test/ljoin.slex.dr', 29
350
350
  def _act_5 val
351
351
  _ID, = *val
352
352
  _ID.value
353
353
 
354
354
  end
355
- .,.,120998293664604.,.,
355
+ .,.,122745804033944.,.,
356
356
 
357
357
  end
358
358
 
@@ -365,6 +365,6 @@ end
365
365
  if __FILE__ == $0
366
366
  ### Main Code
367
367
  p = createDecoratedStatefulLexerTest2
368
- p.yyparse(STDIN)
368
+ p.parse(STDIN)
369
369
 
370
370
  end
@@ -4,7 +4,9 @@ require "depager/grammar.rb"
4
4
  require "depager/utils.rb"
5
5
 
6
6
  module Depager
7
- Tmpldir = File.expand_path "#{File.dirname(__FILE__)}/depager/template"
7
+ LIBDIR = File.expand_path "#{File.dirname(__FILE__)}/depager/ruby"
8
+ Tmpldir = "#{LIBDIR}/templates"
9
+ $LOAD_PATH.unshift LIBDIR
8
10
 
9
11
  #
10
12
  # file manager
@@ -121,11 +123,21 @@ module Depager
121
123
  #
122
124
  class GrammarParser
123
125
  include FileUtils
126
+
127
+ HOOK_KEYS = [
128
+ :pre_rule_list, :post_rule_list,
129
+ :pre_rule, :post_rule,
130
+ :post_lhs,
131
+ :post_rhs_list, :pre_rhs_list,
132
+ :pre_rhs, :post_rhs, :post_symbol
133
+ ] #:nodoc:
134
+ def self.hook_name? s
135
+ HOOK_KEYS.include? s.to_sym
136
+ end
137
+
124
138
  def files
125
139
  @d_parser.files
126
140
  end
127
- alias file files
128
- alias f files
129
141
 
130
142
  private
131
143
  GToken = Struct.new(:tag, :value, :name, :lineno)
@@ -135,18 +147,18 @@ module Depager
135
147
  end
136
148
  def parse_grammar
137
149
  gettoken
138
- preRuleList
150
+ do_hook :pre_rule_list
139
151
  parse_rulelist
140
- postRuleList
152
+ do_hook :post_rule_list
141
153
  unless @token.tag == nil
142
154
  error_exit "syntax error(grammar). "<<
143
155
  "unexpected '#{@token.tag}' expect '%%'"
144
156
  end
145
157
  end
146
158
  def parse_rulelist
147
- preRule
159
+ do_hook :pre_rule
148
160
  parse_rule
149
- postRule
161
+ do_hook :post_rule
150
162
  if @token.tag == :NT
151
163
  parse_rulelist
152
164
  end
@@ -156,7 +168,7 @@ module Depager
156
168
  @lhs = @token.value
157
169
 
158
170
  gettoken
159
- postLhs
171
+ do_hook :post_lhs
160
172
 
161
173
  unless @token.tag == ':'
162
174
  error_exit "syntax error(grammar). "<<
@@ -165,13 +177,13 @@ module Depager
165
177
  gettoken
166
178
 
167
179
  @nrhs = 0
168
- preRhsList
180
+ do_hook :pre_rhs_list
169
181
  parse_rhslist
170
- postRhsList
182
+ do_hook :post_rhs_list
171
183
 
172
184
  unless @token.tag == ';'
173
185
  error_exit "syntax error(grammar). " <<
174
- "unexpected '#{@token[0]}' expecting ';'"
186
+ "unexpected '#{@token.tag}' expecting ';'"
175
187
  end
176
188
  gettoken
177
189
  end
@@ -179,10 +191,10 @@ module Depager
179
191
  def parse_rhslist
180
192
  @rhs = []; @rhsni = {}; @prec = nil
181
193
  @optval = Array.new(@nparam)
182
- preRhs
194
+ do_hook :pre_rhs
183
195
  parse_syms
184
196
  add_rule(@lhs, @rhs, @prec)
185
- postRhs
197
+ do_hook :post_rhs
186
198
  @nrhs += 1
187
199
 
188
200
  if @token.tag == '|'
@@ -195,12 +207,11 @@ module Depager
195
207
  rhs_insert_sym(-1, @token.value, @token.name)
196
208
  gettoken
197
209
 
198
- postSymbol
210
+ do_hook :post_symbol
199
211
  parse_syms
200
212
  end
201
213
  end
202
214
 
203
- public
204
215
  def gettoken
205
216
  while !@line.empty? || !eof?
206
217
  if @line.empty?
@@ -235,11 +246,11 @@ module Depager
235
246
  val = @terms[s] ||= - (@terms.size + 1)
236
247
  when /^%%/
237
248
  return _GToken(nil, nil)
238
- when /^(.)/
249
+ when /^([:;|])/
239
250
  tag = $&
240
251
  val = $&
241
252
  else
242
- raise RuntimeError, "must not happen #{line}"
253
+ return _GToken(:UNKNOWN, @line[0].chr)
243
254
  end
244
255
  @oldline = @line; @line = $'
245
256
  @i2s[val] ||= s if val && s
@@ -250,38 +261,17 @@ module Depager
250
261
  end
251
262
 
252
263
  private
253
- def preRuleList
254
- @prerulelist.each{|o, m| o.send m}
255
- end
256
- def postRuleList
257
- @postrulelist.each{|o, m| o.send m}
258
- end
259
- def preRule
260
- @prerule.each{|o, m| o.send m}
261
- end
262
- def postRule
263
- @postrule.each{|o, m| o.send m}
264
- end
265
- def postLhs
266
- @postlhs.each{|o, m| o.send(m)}
267
- end
268
- def preRhsList
269
- @prerhslist.each{|o, m| o.send m}
270
- end
271
- def postRhsList
272
- @postrhslist.each{|o, m| o.send m}
273
- end
274
- def preRhs
275
- @prerhs.each{|o, m| o.send(m)}
276
- end
277
- def postRhs
278
- @postrhs.each{|o, m| o.send(m)}
279
- end
280
- def postSymbol
281
- @postsymbol.each{|o, m| o.send(m)}
264
+ def do_hook hook
265
+ @hooks[hook].each{|o, m| o.send m}
282
266
  end
283
267
 
284
268
  public
269
+ # update line and get token
270
+ def update_context line
271
+ @line = line
272
+ gettoken
273
+ end
274
+
285
275
  # get number of param
286
276
  def getnparam a = nil
287
277
  return nil unless a
@@ -335,14 +325,11 @@ module Depager
335
325
  end
336
326
  end
337
327
 
338
- attr_accessor :rules, :terms, :nonterms, :precs
328
+ attr_accessor :rules, :terms, :nonterms, :precs, :table
339
329
  attr_accessor :line, :line0, :oldline, :token
340
330
  attr_accessor :optouter, :optinner, :optmain, :mixin
341
331
  attr_accessor :nparams, :lhs, :rhs, :nrhs, :rhsni, :nparam, :nrules
342
- attr_accessor :prerulelist, :postrulelist, :prerule, :postrule
343
- attr_accessor :postlhs, :prerhslist, :postrhslist
344
- attr_accessor :prerhs, :postrhs, :postsymbol
345
- attr_reader :d_parser, :target_name, :table, :parsing_method
332
+ attr_reader :d_parser, :target_name, :parsing_method, :hooks
346
333
 
347
334
  def initialize d_parser
348
335
  @yydebug = true
@@ -401,21 +388,7 @@ module Depager
401
388
 
402
389
  # initialize hook
403
390
  def init_hook
404
- @prerulelist = []
405
- @postrulelist = []
406
-
407
- @prerule = []
408
- @postrule = []
409
-
410
- @postlhs = []
411
-
412
- @postrhslist = []
413
- @prerhslist = []
414
-
415
- @prerhs = []
416
- @postrhs = []
417
-
418
- @postsymbol = []
391
+ @hooks = HOOK_KEYS.inject({}){|r,i| r[i]=[]; r }
419
392
  end
420
393
 
421
394
  def init_grammar
@@ -627,21 +600,7 @@ module Depager
627
600
  @parsing_method = Simple
628
601
  @basis_name = 'self'
629
602
  @paramkey = nil
630
- @regs = {
631
- "prerulelist" => nil,
632
- "postrulelist" => nil,
633
-
634
- "prerule" => nil,
635
- "postrule" => nil,
636
-
637
- "postlhs" => nil,
638
-
639
- "postrhslist" => nil,
640
- "prerhslist" => nil,
641
-
642
- "prerhs" => nil,
643
- "postrhs" => nil,
644
- }
603
+ @regs = { }
645
604
  end
646
605
 
647
606
  def parse_decl
@@ -655,8 +614,11 @@ module Depager
655
614
  [$1, $3 ? true : false]
656
615
  end
657
616
  hook = hs.split(' ')
658
- hookname = hook.join('_')
659
- hook.each{|i| @regs[i] = [i, "#{@d_parser.target_name}_#{hookname}"]}
617
+ hookname = hook.join('__')
618
+ hook.each do |i| i = i.to_sym
619
+ raise unless GrammarParser.hook_name? i
620
+ @regs[i] = "#{@d_parser.target_name}_#{hookname}"
621
+ end
660
622
  @optouter.push(parse_hook(hookname, mtsk))
661
623
  when /^%param\s*(.*)\s*$/
662
624
  @paramkey = $1