Class: JSGF::Parser
- Inherits:
-
Racc::Parser
- Object
- Racc::Parser
- JSGF::Parser
- 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", "alternation", "atom_list", "alternation_item", "rule_atom", "weighted_item", "tagged_atom", "group_list", "rule_group", "rule_optional" ]
- Racc_debug_parser =
false
Instance Attribute Summary collapse
-
#grammar_name ⇒ Object
readonly
Returns the value of attribute grammar_name.
-
#handler ⇒ Object
readonly
Returns the value of attribute handler.
Instance Method Summary collapse
-
#_reduce_15(val, _values, result) ⇒ Object
reduce 14 omitted.
- #_reduce_16(val, _values, result) ⇒ Object
- #_reduce_17(val, _values, result) ⇒ Object
- #_reduce_18(val, _values, result) ⇒ Object
- #_reduce_19(val, _values, result) ⇒ Object
- #_reduce_20(val, _values, result) ⇒ Object
-
#_reduce_24(val, _values, result) ⇒ Object
reduce 23 omitted.
-
#_reduce_26(val, _values, result) ⇒ Object
reduce 25 omitted.
- #_reduce_27(val, _values, result) ⇒ Object
-
#_reduce_30(val, _values, result) ⇒ Object
reduce 29 omitted.
- #_reduce_31(val, _values, result) ⇒ Object
- #_reduce_32(val, _values, result) ⇒ Object
- #_reduce_33(val, _values, result) ⇒ Object
-
#_reduce_36(val, _values, result) ⇒ Object
reduce 35 omitted.
- #_reduce_37(val, _values, result) ⇒ Object
-
#_reduce_6(val, _values, result) ⇒ Object
reduce 5 omitted.
- #_reduce_7(val, _values, result) ⇒ Object
- #_reduce_8(val, _values, result) ⇒ Object
- #_reduce_9(val, _values, result) ⇒ Object
- #_reduce_none(val, _values, result) ⇒ Object
- #define_alternation(*args) ⇒ Object
- #define_atom(atom, weight = 1.0, tags = []) ⇒ Object
- #define_optional(*args) ⇒ Object
- #define_rule(name, visibility = :private, *args) ⇒ Object
-
#initialize(tokenizer) ⇒ Parser
constructor
A new instance of Parser.
- #next_token ⇒ Object
- #parse ⇒ Object
- #rule_reference(name) ⇒ Object
Constructor Details
#initialize(tokenizer) ⇒ Parser
Returns a new instance of Parser.
23 24 25 26 27 28 29 30 |
# File 'lib/jsgf/parser.rb', line 23 def initialize(tokenizer) @private_rules = {} @public_rules = {} @rules = {} tokenizer = JSGF::Tokenizer.new(tokenizer) if tokenizer.is_a?(String) @tokenizer = tokenizer super() end |
Instance Attribute Details
#grammar_name ⇒ Object (readonly)
Returns the value of attribute grammar_name.
20 21 22 |
# File 'lib/jsgf/parser.rb', line 20 def grammar_name @grammar_name end |
#handler ⇒ Object (readonly)
Returns the value of attribute handler.
21 22 23 |
# File 'lib/jsgf/parser.rb', line 21 def handler @handler end |
Instance Method Details
#_reduce_15(val, _values, result) ⇒ Object
reduce 14 omitted
319 320 321 322 |
# File 'lib/jsgf/parser.rb', line 319 def _reduce_15(val, _values, result) result = val[1] result end |
#_reduce_16(val, _values, result) ⇒ Object
324 325 326 327 |
# File 'lib/jsgf/parser.rb', line 324 def _reduce_16(val, _values, result) result = define_rule(val[0], :private, *(val[2..-2])) result end |
#_reduce_17(val, _values, result) ⇒ Object
329 330 331 332 |
# File 'lib/jsgf/parser.rb', line 329 def _reduce_17(val, _values, result) result = define_rule(val[0], :private, *(val[2..-2])) result end |
#_reduce_18(val, _values, result) ⇒ Object
334 335 336 337 |
# File 'lib/jsgf/parser.rb', line 334 def _reduce_18(val, _values, result) val[1][:visibility] = :public result end |
#_reduce_19(val, _values, result) ⇒ Object
339 340 341 342 |
# File 'lib/jsgf/parser.rb', line 339 def _reduce_19(val, _values, result) result = val.first result end |
#_reduce_20(val, _values, result) ⇒ Object
344 345 346 347 |
# File 'lib/jsgf/parser.rb', line 344 def _reduce_20(val, _values, result) result = define_alternation(*val) result end |
#_reduce_24(val, _values, result) ⇒ Object
reduce 23 omitted
355 356 357 358 |
# File 'lib/jsgf/parser.rb', line 355 def _reduce_24(val, _values, result) val[0][:tags].push(val[1]); result = val[0] result end |
#_reduce_26(val, _values, result) ⇒ Object
reduce 25 omitted
362 363 364 365 |
# File 'lib/jsgf/parser.rb', line 362 def _reduce_26(val, _values, result) result = val; result end |
#_reduce_27(val, _values, result) ⇒ Object
367 368 369 370 |
# File 'lib/jsgf/parser.rb', line 367 def _reduce_27(val, _values, result) val[1][:weight] = val.first[1..-2].to_f; result = val[1] result end |
#_reduce_30(val, _values, result) ⇒ Object
reduce 29 omitted
376 377 378 379 |
# File 'lib/jsgf/parser.rb', line 376 def _reduce_30(val, _values, result) result = val[1] result end |
#_reduce_31(val, _values, result) ⇒ Object
381 382 383 384 |
# File 'lib/jsgf/parser.rb', line 381 def _reduce_31(val, _values, result) result = define_optional(val[1]) result end |
#_reduce_32(val, _values, result) ⇒ Object
386 387 388 389 |
# File 'lib/jsgf/parser.rb', line 386 def _reduce_32(val, _values, result) result = define_atom(val.first) result end |
#_reduce_33(val, _values, result) ⇒ Object
391 392 393 394 |
# File 'lib/jsgf/parser.rb', line 391 def _reduce_33(val, _values, result) result = rule_reference(val[0]) result end |
#_reduce_36(val, _values, result) ⇒ Object
reduce 35 omitted
400 401 402 403 |
# File 'lib/jsgf/parser.rb', line 400 def _reduce_36(val, _values, result) result = JSGF::Repetition.new(val[0], 0) result end |
#_reduce_37(val, _values, result) ⇒ Object
405 406 407 408 |
# File 'lib/jsgf/parser.rb', line 405 def _reduce_37(val, _values, result) result = JSGF::Repetition.new(val[0], 1) result end |
#_reduce_6(val, _values, result) ⇒ Object
reduce 5 omitted
289 290 291 292 |
# File 'lib/jsgf/parser.rb', line 289 def _reduce_6(val, _values, result) @version = val[1]; result end |
#_reduce_7(val, _values, result) ⇒ Object
294 295 296 297 |
# File 'lib/jsgf/parser.rb', line 294 def _reduce_7(val, _values, result) @version = val[1]; @charset = val[2]; result end |
#_reduce_8(val, _values, result) ⇒ Object
299 300 301 302 |
# File 'lib/jsgf/parser.rb', line 299 def _reduce_8(val, _values, result) @version = val[1]; @charset = val[2]; @locale = val[3]; result end |
#_reduce_9(val, _values, result) ⇒ Object
304 305 306 307 |
# File 'lib/jsgf/parser.rb', line 304 def _reduce_9(val, _values, result) @grammar_name = val[1] result end |
#_reduce_none(val, _values, result) ⇒ Object
410 411 412 |
# File 'lib/jsgf/parser.rb', line 410 def _reduce_none(val, _values, result) val[0] end |
#define_alternation(*args) ⇒ Object
32 33 34 35 36 37 38 39 |
# File 'lib/jsgf/parser.rb', line 32 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
50 51 52 |
# File 'lib/jsgf/parser.rb', line 50 def define_atom(atom, weight=1.0, =[]) {atom:atom, weight:weight, tags:[]} end |
#define_optional(*args) ⇒ Object
41 42 43 44 45 46 47 48 |
# File 'lib/jsgf/parser.rb', line 41 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
54 55 56 57 58 |
# File 'lib/jsgf/parser.rb', line 54 def define_rule(name, visibility=:private, *args) r = {name: name, visibility:visibility, atoms:args.flatten} @rules[name] = r r end |
#next_token ⇒ Object
64 65 66 |
# File 'lib/jsgf/parser.rb', line 64 def next_token @tokenizer.next_token end |
#parse ⇒ Object
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/jsgf/parser.rb', line 68 def parse do_parse @rules.each do |(k,v)| if v[:visibility] == :private @private_rules[k] = v[:atoms] else @public_rules[k] = v[:atoms] end end JSGF::Grammar.new( name:@grammar_name, character_encoding:@charset, locale:@locale, private_rules:@private_rules, public_rules:@public_rules, version:@version) end |
#rule_reference(name) ⇒ Object
60 61 62 |
# File 'lib/jsgf/parser.rb', line 60 def rule_reference(name) {name:name, weight:1.0, tags:[]} end |