Class: CFG
- Inherits:
-
Object
- Object
- CFG
- Defined in:
- lib/cfg.rb
Overview
Samll CFG impletation Generate words and check if words are the @lang generates random words
Instance Attribute Summary collapse
-
#chomsky_nf_rules ⇒ Object
readonly
Returns the value of attribute chomsky_nf_rules.
-
#cyk_matrix ⇒ Object
readonly
Returns the value of attribute cyk_matrix.
-
#is_in_l ⇒ Object
readonly
Returns the value of attribute is_in_l.
-
#rnd_words ⇒ Object
readonly
Returns the value of attribute rnd_words.
-
#rules ⇒ Object
Returns the value of attribute rules.
-
#rules_cf ⇒ Object
readonly
Returns the value of attribute rules_cf.
-
#rules_cf_res ⇒ Object
readonly
Returns the value of attribute rules_cf_res.
-
#rules_ef ⇒ Object
readonly
Returns the value of attribute rules_ef.
-
#rules_ef_res ⇒ Object
readonly
Returns the value of attribute rules_ef_res.
-
#start_var ⇒ Object
Returns the value of attribute start_var.
Instance Method Summary collapse
- #chaining_free ⇒ Object
- #chomsky_nf(custom_rule) ⇒ Object
- #cyk_run(word) ⇒ Object
- #epsilon_free(custom_rule) ⇒ Object
- #generate_words(count) ⇒ Object
-
#initialize(alphabet, vars, start_var, rules) ⇒ CFG
constructor
A new instance of CFG.
Constructor Details
#initialize(alphabet, vars, start_var, rules) ⇒ CFG
Returns a new instance of CFG.
17 18 19 20 21 22 23 |
# File 'lib/cfg.rb', line 17 def initialize(alphabet, vars, start_var, rules) @start_var = start_var @rules = _rules rules @rnd_words = [] @vars = vars @alphabet = alphabet end |
Instance Attribute Details
#chomsky_nf_rules ⇒ Object (readonly)
Returns the value of attribute chomsky_nf_rules.
13 14 15 |
# File 'lib/cfg.rb', line 13 def chomsky_nf_rules @chomsky_nf_rules end |
#cyk_matrix ⇒ Object (readonly)
Returns the value of attribute cyk_matrix.
13 14 15 |
# File 'lib/cfg.rb', line 13 def cyk_matrix @cyk_matrix end |
#is_in_l ⇒ Object (readonly)
Returns the value of attribute is_in_l.
13 14 15 |
# File 'lib/cfg.rb', line 13 def is_in_l @is_in_l end |
#rnd_words ⇒ Object (readonly)
Returns the value of attribute rnd_words.
13 14 15 |
# File 'lib/cfg.rb', line 13 def rnd_words @rnd_words end |
#rules ⇒ Object
Returns the value of attribute rules.
12 13 14 |
# File 'lib/cfg.rb', line 12 def rules @rules end |
#rules_cf ⇒ Object (readonly)
Returns the value of attribute rules_cf.
13 14 15 |
# File 'lib/cfg.rb', line 13 def rules_cf @rules_cf end |
#rules_cf_res ⇒ Object (readonly)
Returns the value of attribute rules_cf_res.
13 14 15 |
# File 'lib/cfg.rb', line 13 def rules_cf_res @rules_cf_res end |
#rules_ef ⇒ Object (readonly)
Returns the value of attribute rules_ef.
13 14 15 |
# File 'lib/cfg.rb', line 13 def rules_ef @rules_ef end |
#rules_ef_res ⇒ Object (readonly)
Returns the value of attribute rules_ef_res.
13 14 15 |
# File 'lib/cfg.rb', line 13 def rules_ef_res @rules_ef_res end |
#start_var ⇒ Object
Returns the value of attribute start_var.
12 13 14 |
# File 'lib/cfg.rb', line 12 def start_var @start_var end |
Instance Method Details
#chaining_free ⇒ Object
43 44 45 46 47 |
# File 'lib/cfg.rb', line 43 def chaining_free c_free = CFGHelper::ChainingFree.new @rules_cf_res = c_free.run @rules, @vars @rules_cf = c_free.rebuild_rules @rules_cf_res end |
#chomsky_nf(custom_rule) ⇒ Object
49 50 51 52 53 54 |
# File 'lib/cfg.rb', line 49 def chomsky_nf(custom_rule) chomsky = CFGHelper::ChomskyNF.new rules = chomsky.run custom_rule || @rules, @alphabet @chomsky_nf_rules = chomsky.simplify rules end |
#cyk_run(word) ⇒ Object
56 57 58 59 60 61 62 63 |
# File 'lib/cfg.rb', line 56 def cyk_run(word) cyk = CFGHelper::CYK.new word, @chomsky_nf_rules cyk.run @cyk_matrix = cyk.matrix @is_in_l = cyk.is_in_l end |
#epsilon_free(custom_rule) ⇒ Object
37 38 39 40 41 |
# File 'lib/cfg.rb', line 37 def epsilon_free(custom_rule) e_free = CFGHelper::EpsilonFree.new @rules_ef_res = e_free.run custom_rule || @rules @rules_ef = e_free.rebuild_rules @rules, @rules_ef_res end |
#generate_words(count) ⇒ Object
25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/cfg.rb', line 25 def generate_words(count) @rnd_words = [] loop do word = @start_var @rnd_words << word unless @rnd_words.include? word break if @rnd_words.size == count end end |