Class: JSGF::Parser

Inherits:
Racc::Parser
  • Object
show all
Defined in:
lib/jsgf/parser.rb

Constant Summary collapse

Racc_arg =
[
racc_action_table,
racc_action_check,
racc_action_default,
racc_action_pointer,
racc_goto_table,
racc_goto_check,
racc_goto_default,
racc_goto_pointer,
racc_nt_base,
racc_reduce_table,
racc_token_table,
racc_shift_n,
racc_reduce_n,
racc_use_result_var ]
Racc_token_to_s_table =
[
"$end",
"error",
"GRAMMAR",
"HEADER",
"IMPORT",
"PUBLIC",
"TAG",
"TOKEN",
"WEIGHT",
"\";\"",
"\"<\"",
"\">\"",
"\"=\"",
"\"|\"",
"\"(\"",
"\")\"",
"\"[\"",
"\"]\"",
"\"*\"",
"\"+\"",
"$start",
"grammar",
"header",
"rule_list",
"import_header",
"jsgf_header",
"grammar_header",
"import_statement",
"rule_name",
"rule",
"alternate_list",
"rule_expansion",
"tagged_rule_item",
"rule_item",
"rule_atom",
"weighted_item",
"rule_group",
"rule_optional" ]
Racc_debug_parser =
false

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(tokenizer) ⇒ Parser

Returns a new instance of Parser.



22
23
24
25
26
27
28
# File 'lib/jsgf/parser.rb', line 22

def initialize(tokenizer)
    @private_rules = {}
    @public_rules = {}
    tokenizer = JSGF::Tokenizer.new(tokenizer) if tokenizer.is_a?(String)
    @tokenizer = tokenizer
    super()
end

Instance Attribute Details

#grammar_nameObject (readonly)

Returns the value of attribute grammar_name.



19
20
21
# File 'lib/jsgf/parser.rb', line 19

def grammar_name
  @grammar_name
end

#handlerObject (readonly)

Returns the value of attribute handler.



20
21
22
# File 'lib/jsgf/parser.rb', line 20

def handler
  @handler
end

Instance Method Details

#_reduce_15(val, _values, result) ⇒ Object

reduce 14 omitted



303
304
305
306
# File 'lib/jsgf/parser.rb', line 303

def _reduce_15(val, _values, result)
 result = val[1] 
    result
end

#_reduce_16(val, _values, result) ⇒ Object



308
309
310
311
# File 'lib/jsgf/parser.rb', line 308

def _reduce_16(val, _values, result)
 define_rule(val[0], :private, *(val[2..-2])) 
    result
end

#_reduce_17(val, _values, result) ⇒ Object



313
314
315
316
# File 'lib/jsgf/parser.rb', line 313

def _reduce_17(val, _values, result)
 define_rule(val[1], :public, val[3]) 
    result
end

#_reduce_18(val, _values, result) ⇒ Object



318
319
320
321
# File 'lib/jsgf/parser.rb', line 318

def _reduce_18(val, _values, result)
 result = val.first 
    result
end

#_reduce_19(val, _values, result) ⇒ Object



323
324
325
326
# File 'lib/jsgf/parser.rb', line 323

def _reduce_19(val, _values, result)
 result = define_alternation(*val) 
    result
end

#_reduce_20(val, _values, result) ⇒ Object



328
329
330
331
# File 'lib/jsgf/parser.rb', line 328

def _reduce_20(val, _values, result)
 result = val.first 
    result
end

#_reduce_21(val, _values, result) ⇒ Object



333
334
335
336
# File 'lib/jsgf/parser.rb', line 333

def _reduce_21(val, _values, result)
 result = val 
    result
end

#_reduce_23(val, _values, result) ⇒ Object

reduce 22 omitted



340
341
342
343
# File 'lib/jsgf/parser.rb', line 340

def _reduce_23(val, _values, result)
 val[0][:tags].push(val[1]); result = val[0] 
    result
end

#_reduce_26(val, _values, result) ⇒ Object

reduce 25 omitted



349
350
351
352
# File 'lib/jsgf/parser.rb', line 349

def _reduce_26(val, _values, result)
 val[1][:weight] = val.first[1..-2].to_f; result = val[1] 
    result
end

#_reduce_27(val, _values, result) ⇒ Object



354
355
356
357
# File 'lib/jsgf/parser.rb', line 354

def _reduce_27(val, _values, result)
 result = val[1] 
    result
end

#_reduce_28(val, _values, result) ⇒ Object



359
360
361
362
# File 'lib/jsgf/parser.rb', line 359

def _reduce_28(val, _values, result)
 result = define_optional(val[1]) 
    result
end

#_reduce_29(val, _values, result) ⇒ Object



364
365
366
367
# File 'lib/jsgf/parser.rb', line 364

def _reduce_29(val, _values, result)
 result = define_atom(val.first) 
    result
end

#_reduce_33(val, _values, result) ⇒ Object

reduce 32 omitted



375
376
377
378
# File 'lib/jsgf/parser.rb', line 375

def _reduce_33(val, _values, result)
 result = JSGF::Repetition.new(val[0], 0) 
    result
end

#_reduce_34(val, _values, result) ⇒ Object



380
381
382
383
# File 'lib/jsgf/parser.rb', line 380

def _reduce_34(val, _values, result)
 result = JSGF::Repetition.new(val[0], 1) 
    result
end

#_reduce_6(val, _values, result) ⇒ Object

reduce 5 omitted



273
274
275
276
# File 'lib/jsgf/parser.rb', line 273

def _reduce_6(val, _values, result)
 @version = val[1]; 
    result
end

#_reduce_7(val, _values, result) ⇒ Object



278
279
280
281
# File 'lib/jsgf/parser.rb', line 278

def _reduce_7(val, _values, result)
 @version = val[1]; @charset = val[2]; 
    result
end

#_reduce_8(val, _values, result) ⇒ Object



283
284
285
286
# File 'lib/jsgf/parser.rb', line 283

def _reduce_8(val, _values, result)
 @version = val[1]; @charset = val[2]; @locale = val[3]; 
    result
end

#_reduce_9(val, _values, result) ⇒ Object



288
289
290
291
# File 'lib/jsgf/parser.rb', line 288

def _reduce_9(val, _values, result)
 @grammar_name = val[1] 
    result
end

#_reduce_none(val, _values, result) ⇒ Object



385
386
387
# File 'lib/jsgf/parser.rb', line 385

def _reduce_none(val, _values, result)
  val[0]
end

#define_alternation(*args) ⇒ Object



30
31
32
33
34
35
36
37
# File 'lib/jsgf/parser.rb', line 30

def define_alternation(*args)
    if args.first.is_a?(JSGF::Alternation)
  args.first.push *(args.drop(2))
  args.first
    else
  JSGF::Alternation.new(*(args.each_slice(2).map {|a,b| a}))
    end
end

#define_atom(atom, weight = 1.0, tags = []) ⇒ Object



48
49
50
# File 'lib/jsgf/parser.rb', line 48

def define_atom(atom, weight=1.0, tags=[])
   {atom:atom, weight:weight, tags:[]}
end

#define_optional(*args) ⇒ Object



39
40
41
42
43
44
45
46
# File 'lib/jsgf/parser.rb', line 39

def define_optional(*args)
    if args.first.respond_to?(:optional)
  args.first.optional = true
  args.first
    else
  JSGF::Optional.new(*args)
    end
end

#define_rule(name, visibility = :private, *args) ⇒ Object



52
53
54
55
56
57
58
59
60
# File 'lib/jsgf/parser.rb', line 52

def define_rule(name, visibility=:private, *args)
    r = {name:name, visibility:visibility, atoms:args}
    if visibility == :private
  @private_rules[name] = r
    else
  @public_rules[name] = r
    end
    r
end

#next_tokenObject



62
63
64
# File 'lib/jsgf/parser.rb', line 62

def next_token
    @tokenizer.next_token
end

#parseObject



66
67
68
69
70
71
72
73
# File 'lib/jsgf/parser.rb', line 66

def parse
    do_parse
    JSGF::Grammar.new(  character_encoding:@charset,
      locale:@locale,
      private_rules:@private_rules,
      public_rules:@public_rules,
      version:@version)
end