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.
- checksums.yaml +4 -4
- data/lib/cfg.rb +44 -0
- data/lib/falafel.rb +6 -0
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 821f2ac8523791cce7c4632e69d67a4bee8f208b7e7cf8f1e1e88dbd82e0bc1f
|
4
|
+
data.tar.gz: b92c2f37f9b2585a5aff6f87307378dbdeb6c452db5ff6dd738cd836f57b4a2a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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.
|
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-
|
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.
|
35
|
+
version: 2.7.0
|
35
36
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
36
37
|
requirements:
|
37
38
|
- - ">="
|