Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
lfa:2024:lab04 [2024/10/29 09:09] cata_chiru |
lfa:2024:lab04 [2024/10/29 09:27] (current) cata_chiru |
||
---|---|---|---|
Line 152: | Line 152: | ||
self.components = arg | self.components = arg | ||
- | # TODO 3: Completati metodele __str__, gen, __len__ si eval_gen pentru clasa Union | + | # TODO 3: Completati metodele __str__, gen, __len__ si eval_gen pentru clasa Union |
+ | |||
+ | # Hint: Look at the str.join method to create (expr1|expr2|...) | ||
def __str__(self) -> str: | def __str__(self) -> str: | ||
pass | pass | ||
Line 193: | Line 195: | ||
def __init__(self, regex: Regex): | def __init__(self, regex: Regex): | ||
self.regex = regex | self.regex = regex | ||
+ | |||
+ | # To memorize the base words generated by the regex inside the star, we store them in a list | ||
self.base_words = [""] | self.base_words = [""] | ||
- | self.base_gen() | ||
self.words = [] | self.words = [] | ||
Line 201: | Line 204: | ||
pass | pass | ||
- | def base_gen(self) -> [str]: | ||
- | '''To memorize the base words generated by the regex inside the star, we store them in a list''' | ||
- | | ||
- | # Exemplu de cum comparam tipul unui Obiect cu o clasa | ||
- | if type(self.regex) == Star: | ||
- | # Implement Star.gen with a limiting threshold | ||
- | pass | ||
- | |||
- | # Implement Regex.gen for the rest | ||
- | pass | ||
- | |||
def gen(self, no_items = 10) -> [str]: | def gen(self, no_items = 10) -> [str]: | ||
pass | pass | ||
Line 244: | Line 236: | ||
last_expr = Concat(Star(Union(Symbol('a'), Symbol('b'))), Symbol('b'), Star(Symbol('c'))) | last_expr = Concat(Star(Union(Symbol('a'), Symbol('b'))), Symbol('b'), Star(Symbol('c'))) | ||
last_expr.eval_gen() | last_expr.eval_gen() | ||
- | </code> | + | </code> |
| | ||
The output should be similar to: | The output should be similar to: | ||
<code> | <code> | ||
- | Union (a | b) generates ['a', 'b']. | + | Union (a | b) has length 1 and generates ['a', 'b']. |
- | Concat (a(a | b | c)) generates ['aa', 'ab', 'ac']. | + | Concat (a(a | b | c)) has length 2 and generates ['aa', 'ab', 'ac']. |
- | Concat ((a | b | c)(a | b | c)b) generates ['aab', 'abb', 'acb', 'bab', 'bbb', 'bcb', 'cab', 'cbb', 'ccb']. | + | Concat ((a | b | c)(a | b | c)b) has length 3 and generates ['aab', 'abb', 'acb', 'bab', 'bbb', 'bcb', 'cab', 'cbb', 'ccb']. |
- | Star (a*) generates ['', 'a', 'aa', 'aaa', 'aaaa', 'aaaaa', 'aaaaaa', 'aaaaaaa', 'aaaaaaaa', 'aaaaaaaaa', 'aaaaaaaaaa', '...']. | + | Star (a*) has length 10000000 generates ['', 'a', 'aa', 'aaa', 'aaaa', 'aaaaa', 'aaaaaa', 'aaaaaaa', 'aaaaaaaa', 'aaaaaaaaa', 'aaaaaaaaaa', '...']. |
- | Concat ((a | b)(a*)) generates ['a', 'b', 'aa', 'ba', 'aaa', 'baa', 'aaaa', 'baaa']. | + | Concat ((a | b)(a*)) has length 10000001 and generates ['a', 'b', 'aa', 'ba', 'aaa', 'baa', 'aaaa', 'baaa', '...']. |
- | Concat (((a | b)*)b(c*)) generates ['b', 'ab', 'bb', 'bc', 'aab', 'abb', 'abc', 'bab', 'bbb', 'bbc', 'bcc', 'aaab', 'aabb', 'aabc', 'abab', 'abbb', 'abbc', 'abcc', 'baab', 'babb', 'babc', 'bbab', 'bbbb', 'bbbc', 'bbcc', 'bccc', 'aaaab', 'aaabb', '...']. | + | Concat (((a | b)*)b(c*)) has length 20000001 and generates ['b', 'ab', 'bb', 'bc', 'aab', 'abb', 'abc', 'bab', 'bbb', 'bbc', 'bcc', 'aaab', 'aabb', 'aabc', 'abab', 'abbb', 'abbc', 'abcc', 'baab', 'babb', 'babc', 'bbab', 'bbbb', 'bbbc', 'bbcc', 'bccc', '...']. |
</code> | </code> |