falafel 0.0.0.1 → 0.0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/cfg.rb +44 -0
  3. data/lib/falafel.rb +6 -0
  4. metadata +4 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 455d0fee114300f1c5a7f5f68b128412704f6bba8782efc62db6f6d151a1bfdd
4
- data.tar.gz: b96c52e7fd535cc95e140722e522c959bb860c78ab0b93030240c7fa148995a6
3
+ metadata.gz: 821f2ac8523791cce7c4632e69d67a4bee8f208b7e7cf8f1e1e88dbd82e0bc1f
4
+ data.tar.gz: b92c2f37f9b2585a5aff6f87307378dbdeb6c452db5ff6dd738cd836f57b4a2a
5
5
  SHA512:
6
- metadata.gz: 44076c2c3d1ab9cb52a43493b6e17f63944d7dc2c7ef6842395befec2f27513103e0592a671ff5352ab680381d9e1323ea498cb332926f924ec1a4236ac9c051
7
- data.tar.gz: bfe088d01ace7256fa535ac8c1e2d041972203535a98ffbce6e9785a7e28bb2aed332aa2239a0f43929d8c4aecb69a422bd5273580e87e373611db122134f403
6
+ metadata.gz: a40d294e74954d85c19abe0bcd80c222390b7f3703c6a87d471d8fb30ed89aadd0ab5297f7e02c4521c282e6bd55e31e70cee68482a0d36c2b0572c477e05263
7
+ data.tar.gz: 1889ce0c9deb9585907fc663e20d73895051fd054a9289b591f7990a3c3494579ad5fbfce79f9e92153bb4882ca621f25e063e8546346015f15660614902a888
data/lib/cfg.rb ADDED
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Samll CFG impletation
4
+ # Generate words and check if words are the @lang
5
+ class CFG
6
+ attr_accessor :alphabet, :vars, :start_var, :rules
7
+ attr_reader :rnd_words
8
+ attr_writer :lang
9
+
10
+ def initialize(alphabet, vars, start_var, rules)
11
+ @alphabet = alphabet
12
+ @vars = vars
13
+ @start_var = start_var
14
+ @rules = _rules rules
15
+ @rnd_words = []
16
+ end
17
+
18
+ def generate_word
19
+ word = _expand @start_var
20
+
21
+ return unless @lang.call word
22
+
23
+ @rnd_words << word unless @rnd_words.include? word
24
+ end
25
+
26
+ def dyck?(word)
27
+ ->(w) { (w.count('a') - w.count('b')).zero? }.call word
28
+ end
29
+
30
+ private
31
+
32
+ def _expand(symbol)
33
+ production = @rules[symbol]
34
+
35
+ return symbol if production.nil?
36
+
37
+ rhs = production.sample
38
+ rhs.map { |s| _expand(s) }.join
39
+ end
40
+
41
+ def _rules(rules)
42
+ rules.each_value { |k| k.each_with_index { |item, index| k[index] = item[0].is_a?(String) ? item[0].split('') : item } }
43
+ end
44
+ end
data/lib/falafel.rb CHANGED
@@ -106,6 +106,12 @@ class Falafel
106
106
  Pump.new lang: nil, word: nil, n: 2, k: 20
107
107
  end
108
108
 
109
+ def cfg(alphabet, vars_set, start_var, rules)
110
+ require_relative 'cfg'
111
+
112
+ CFG.new alphabet, vars_set, start_var, rules
113
+ end
114
+
109
115
  private
110
116
 
111
117
  # alle bilder eine menge m unter r
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: falafel
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0.1
4
+ version: 0.0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Abed A
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-06-05 00:00:00.000000000 Z
11
+ date: 2023-06-21 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email:
@@ -16,6 +16,7 @@ executables: []
16
16
  extensions: []
17
17
  extra_rdoc_files: []
18
18
  files:
19
+ - lib/cfg.rb
19
20
  - lib/dfa.rb
20
21
  - lib/falafel.rb
21
22
  - lib/pump.rb
@@ -31,7 +32,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
31
32
  requirements:
32
33
  - - ">="
33
34
  - !ruby/object:Gem::Version
34
- version: 2.6.0
35
+ version: 2.7.0
35
36
  required_rubygems_version: !ruby/object:Gem::Requirement
36
37
  requirements:
37
38
  - - ">="