Skip to content

Commit dcde189

Browse files
committed
2 parents 73e897b + d3a9c06 commit dcde189

16 files changed

+354
-28
lines changed

Readme.md

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
## Formal Languages Assignment
2+
### 00275739 - Pedro Emilio Cardouzo
3+
### 00244113 - Giovani Chassot Simon
4+
### 00205685 - Alexandre dos Reis Saccol
5+
6+
### Usage:
7+
8+
#### Providing grammar and single input without spaces:
9+
``` $ python main.py grammars/grammar_name.txt this_is_a_word ```
10+
11+
12+
#### Providing grammar and single input with spaces (use quote marks):
13+
```$ python main.py grammars/grammar_name.txt "this is a sentence"```
14+
15+
16+
#### Providing just grammar, with inputs provided in the program:
17+
```$ python main.py grammars/grammar_name.txt```
18+
19+
20+
#### Running the program without command-line arguments, providing grammar and input within the program:
21+
22+
```$ python main.py```

Readme.txt

-5
This file was deleted.

grammars/cyk_example_Blauth.txt

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
#Terminais # A secao de simbolos terminais eh a primeira do arquivo.
2+
[ a ]
3+
[ b ]
4+
#Variaveis # A secao de variaveis inicia pela palavra reservada "Variaveis", e eh a segunda do arquivo
5+
[ S ]
6+
[ A ]
7+
#Inicial # O simbolo inicial possui uma secao propria, iniciada pela palavra "Inicial"
8+
[ S ] # Essa secao possui apenas uma linha com o simbolo inicial entre colchetes.
9+
#Regras # A ultima secao vem encabecada pela palavra-chave "Regras"
10+
[ S ] > [ A ] [ A ]
11+
[ S ] > [ A ] [ S ]
12+
[ S ] > [ b ]
13+
14+
[ A ] > [ S ] [ A ]
15+
[ A ] > [ A ] [ S ]
16+
[ A ] > [ a ]

grammars/cyk_example_Hopcroft.txt

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#Terminais # A secao de simbolos terminais eh a primeira do arquivo.
2+
[ a ]
3+
[ b ]
4+
#Variaveis # A secao de variaveis inicia pela palavra reservada "Variaveis", e eh a segunda do arquivo
5+
[ S ]
6+
[ A ]
7+
[ C ]
8+
#Inicial # O simbolo inicial possui uma secao propria, iniciada pela palavra "Inicial"
9+
[ S ] # Essa secao possui apenas uma linha com o simbolo inicial entre colchetes.
10+
#Regras # A ultima secao vem encabecada pela palavra-chave "Regras"
11+
[ S ] > [ A ] [ B ]
12+
[ S ] > [ B ] [ C ]
13+
14+
[ A ] > [ B ] [ A ]
15+
[ A ] > [ a ]
16+
17+
[ B ] > [ C ] [ C ]
18+
[ B ] > [ b ]
19+
20+
[ C ] > [ A ] [ B ]
21+
[ C ] > [ a ]

grammars/cyk_example_Wikipedia.txt

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
#Terminais # A secao de simbolos terminais eh a primeira do arquivo.
2+
[ she ]
3+
[ eats ]
4+
[ with ]
5+
[ fish ]
6+
[ fork ]
7+
[ a ]
8+
#Variaveis # A secao de variaveis inicia pela palavra reservada "Variaveis", e eh a segunda do arquivo
9+
[ S ]
10+
[ VP ]
11+
[ NP ]
12+
[ PP ]
13+
[ Det ]
14+
[ VB ]
15+
[ P ]
16+
[ N ]
17+
18+
#Inicial # O simbolo inicial possui uma secao propria, iniciada pela palavra "Inicial"
19+
[ S ] # Essa secao possui apenas uma linha com o simbolo inicial entre colchetes.
20+
#Regras # A ultima secao vem encabecada pela palavra-chave "Regras"
21+
[ S ] > [ NP ] [ VP ]
22+
[ VP ] > [ VP ] [ PP ]
23+
[ VP ] > [ VB ] [ NP ]
24+
[ VP ] > [ eats ]
25+
[ PP ] > [ P ] [ NP ]
26+
[ NP ] > [ Det ] [ N ]
27+
[ NP ] > [ she ]
28+
[ VB ] > [ eats ]
29+
[ P ] > [ with ]
30+
[ N ] > [ fish ]
31+
[ N ] > [ fork ]
32+
[ Det ] > [ a ]

grammars/gramatica_exemplo2.txt

+54
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
#Terminais
2+
[ runs ]
3+
[ barks ]
4+
[ eats ]
5+
[ chases ]
6+
[ park ]
7+
[ dog ]
8+
[ cat ]
9+
[ meat ]
10+
[ the ]
11+
[ a ]
12+
[ in ]
13+
[ with ]
14+
[ at ]
15+
#Variaveis
16+
[ N ]
17+
[ VB ]
18+
[ NP ]
19+
[ DT ]
20+
[ VP ]
21+
[ S ]
22+
[ PP ]
23+
[ P ]
24+
#Inicial
25+
[ S ]
26+
#Regras
27+
[ S ] > [ NP ] [ VP ]
28+
[ S ] > [ S ] [ S ]
29+
[ NP ] > [ dog ]
30+
[ NP ] > [ cat ]
31+
[ NP ] > [ meat ]
32+
[ NP ] > [ park ]
33+
[ NP ] > [ DT ] [ N ]
34+
[ NP ] > [ NP ] [ PP ]
35+
[ N ] > [ dog ]
36+
[ N ] > [ cat ]
37+
[ N ] > [ meat ]
38+
[ N ] > [ park ]
39+
[ VP ] > [ VB ] [ NP ]
40+
[ VP ] > [ VP ] [ PP ]
41+
[ VP ] > [ runs ]
42+
[ VP ] > [ barks ]
43+
[ VP ] > [ eats ]
44+
[ VP ] > [ chases ]
45+
[ VB ] > [ runs ]
46+
[ VB ] > [ barks ]
47+
[ VB ] > [ eats ]
48+
[ VB ] > [ chases ]
49+
[ DT ] > [ a ]
50+
[ DT ] > [ the ]
51+
[ PP ] > [ P ] [ NP ]
52+
[ P ] > [ in ]
53+
[ P ] > [ with ]
54+
[ P ] > [ at ]

grammars/newtest.txt

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
#Terminais # A secao de simbolos terminais eh a primeira do arquivo.
2+
[ a ]
3+
[ b ]
4+
#Variaveis # A secao de variaveis inicia pela palavra reservada "Variaveis", e eh a segunda do arquivo
5+
[ S ]
6+
[ A ]
7+
[ B ]
8+
#Inicial # O simbolo inicial possui uma secao propria, iniciada pela palavra "Inicial"
9+
[ S ] # Essa secao possui apenas uma linha com o simbolo inicial entre colchetes.
10+
#Regras # A ultima secao vem encabecada pela palavra-chave "Regras"
11+
[ S ] > [ A ] [ B ]
12+
[ S ] > [ a ]
13+
14+
[ A ] > [ b ]

grammars/regular_expression.txt

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
#Terminais # A secao de simbolos terminais eh a primeira do arquivo.
2+
[ V ]
3+
[ empty ]
4+
[ a ]
5+
[ b ]
6+
[ ( ]
7+
[ ) ]
8+
[ + ]
9+
[ * ]
10+
#Variaveis # A secao de variaveis inicia pela palavra reservada "Variaveis", e eh a segunda do arquivo
11+
[ S ]
12+
[ Terminal ]
13+
[ Other ]
14+
#Inicial # O simbolo inicial possui uma secao propria, iniciada pela palavra "Inicial"
15+
[ S ] # Essa secao possui apenas uma linha com o simbolo inicial entre colchetes.
16+
#Regras # A ultima secao vem encabecada pela palavra-chave "Regras"
17+
[ S ] > [ empty ]
18+
[ S ] > [ V ]
19+
[ S ] > [ ( ] [ S ] [ + ] [ S ] [ ) ]
20+
[ S ] > [ ( ] [ S ] [ S ] [ ) ]
21+
[ S ] > [ S ] [ * ] [ S ]
22+
[ S ] > [ Terminal ]
23+
[ S ] > [ Other ]
24+
[ Terminal ] > [ a ]
25+
[ Terminal ] > [ b ]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
#Terminais # A secao de simbolos terminais eh a primeira do arquivo.
2+
[ a ]
3+
[ b ]
4+
#Variaveis # A secao de variaveis inicia pela palavra reservada "Variaveis", e eh a segunda do arquivo
5+
[ S ]
6+
[ X ]
7+
[ Y ]
8+
#Inicial # O simbolo inicial possui uma secao propria, iniciada pela palavra "Inicial"
9+
[ S ] # Essa secao possui apenas uma linha com o simbolo inicial entre colchetes.
10+
#Regras # A ultima secao vem encabecada pela palavra-chave "Regras"
11+
[ S ] > [ a ] [ X ] [ a ]
12+
[ S ] > [ b ] [ X ] [ b ]
13+
[ S ] > [ V ]
14+
15+
[ X ] > [ a ]
16+
[ X ] > [ b ]
17+
18+
[ X ] > [ Y ]
19+
[ Y ] > [ V ]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
#Terminais # A secao de simbolos terminais eh a primeira do arquivo.
2+
[ a ]
3+
[ b ]
4+
#Variaveis # A secao de variaveis inicia pela palavra reservada "Variaveis", e eh a segunda do arquivo
5+
[ S ]
6+
[ A ]
7+
[ B ]
8+
#Inicial # O simbolo inicial possui uma secao propria, iniciada pela palavra "Inicial"
9+
[ S ] # Essa secao possui apenas uma linha com o simbolo inicial entre colchetes.
10+
#Regras # A ultima secao vem encabecada pela palavra-chave "Regras"
11+
[ S ] > [ A ] [ B ]
12+
13+
[ A ] > [ a ] [ A ] [ A ]
14+
[ A ] > [ V ]
15+
16+
[ B ] > [ b ] [ B ] [ B ]
17+
[ B ] > [ V ]
18+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
#Terminais # A secao de simbolos terminais eh a primeira do arquivo.
2+
[ a ]
3+
[ b ]
4+
[ c ]
5+
#Variaveis # A secao de variaveis inicia pela palavra reservada "Variaveis", e eh a segunda do arquivo
6+
[ S ]
7+
[ A ]
8+
[ B ]
9+
[ C ]
10+
#Inicial # O simbolo inicial possui uma secao propria, iniciada pela palavra "Inicial"
11+
[ S ] # Essa secao possui apenas uma linha com o simbolo inicial entre colchetes.
12+
#Regras # A ultima secao vem encabecada pela palavra-chave "Regras"
13+
[ S ] > [ a ] [ A ] [ a ]
14+
[ S ] > [ b ] [ B ] [ b ]
15+
16+
[ A ] > [ a ]
17+
[ A ] > [ S ]
18+
19+
[ C ] > [ c ]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
#Terminais # A secao de simbolos terminais eh a primeira do arquivo.
2+
[ a ]
3+
[ b ]
4+
#Variaveis # A secao de variaveis inicia pela palavra reservada "Variaveis", e eh a segunda do arquivo
5+
[ S ]
6+
[ A ]
7+
[ B ]
8+
#Inicial # O simbolo inicial possui uma secao propria, iniciada pela palavra "Inicial"
9+
[ S ] # Essa secao possui apenas uma linha com o simbolo inicial entre colchetes.
10+
#Regras # A ultima secao vem encabecada pela palavra-chave "Regras"
11+
[ S ] > [ A ] [ B ]
12+
[ S ] > [ a ]
13+
14+
[ A ] > [ b ]

grammars/t1.txt

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
#Terminais # A secao de simbolos terminais eh a primeira do arquivo.
2+
[ a ]
3+
[ b ]
4+
[ c ]
5+
#Variaveis # A secao de variaveis inicia pela palavra reservada "Variaveis", e eh a segunda do arquivo
6+
[ S ]
7+
[ A ]
8+
[ B ]
9+
[ C ]
10+
#Inicial # O simbolo inicial possui uma secao propria, iniciada pela palavra "Inicial"
11+
[ S ] # Essa secao possui apenas uma linha com o simbolo inicial entre colchetes.
12+
#Regras # A ultima secao vem encabecada pela palavra-chave "Regras"
13+
[ S ] > [ a ] [ A ] [ a ]
14+
[ S ] > [ b ] [ B ] [ b ]
15+
16+
[ A ] > [ a ]
17+
[ A ] > [ S ]
18+
19+
[ C ] > [ c ]

grammars/t2.txt

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
#Terminais # A secao de simbolos terminais eh a primeira do arquivo.
2+
[ a ]
3+
[ b ]
4+
#Variaveis # A secao de variaveis inicia pela palavra reservada "Variaveis", e eh a segunda do arquivo
5+
[ S ]
6+
[ A ]
7+
[ B ]
8+
#Inicial # O simbolo inicial possui uma secao propria, iniciada pela palavra "Inicial"
9+
[ S ] # Essa secao possui apenas uma linha com o simbolo inicial entre colchetes.
10+
#Regras # A ultima secao vem encabecada pela palavra-chave "Regras"
11+
[ S ] > [ A ] [ B ]
12+
[ S ] > [ a ]
13+
14+
[ A ] > [ b ]

main.py

+42-12
Original file line numberDiff line numberDiff line change
@@ -3,28 +3,58 @@
33
from src.ChomskyNormalForm import ChomskyNormalForm
44
from src.CYKTable import *
55

6-
def main():
7-
8-
# filename handling stuff
9-
file_folder = './grammars/' # folder is test_grammars
10-
filename = '' # input('name of grammar file inside grammars (default = test.txt): ')
6+
def get_grammar_filename():
7+
file_folder = './grammars/'
8+
if len(sys.argv) >= 2:
9+
file_folder = ''
10+
filename = sys.argv[1]
11+
12+
else:
13+
filename = input('Enter the name of a grammar from within the ./grammars/ directory: ')
1114
if filename == '':
12-
filename = '4_a.txt'
15+
print('No filename given, assuming t.txt')
16+
filename = 't.txt'
17+
18+
return file_folder + filename
19+
20+
def get_input_word_from_command_line():
21+
if len(sys.argv) == 3:
22+
return sys.argv[2]
23+
elif len(sys.argv) > 3:
24+
print('\nSentences (i.e., words with spaces in them) should be entered between "quote marks". \nIgnoring command-line input.')
25+
return ''
26+
27+
28+
29+
30+
31+
def main():
1332

1433
grammar = Grammar(log=True) # True is sent to 'log' as we want to log each step of minimization
1534
try:
16-
grammar.read_grammar_from_file(file_folder + filename)
35+
filename = get_grammar_filename()
36+
grammar.read_grammar_from_file(filename)
1737
except FileNotFoundError:
1838
print('File ' + filename + ' could not be found inside grammars folder. Please check if name is correct.')
1939
sys.exit(1)
2040

2141
cyk_parser = Parser(grammar, log_grammar_preparation=True)
22-
cyk_parser.parse('abaab')
2342

24-
#for c in tree.children:
25-
# print('*'*30)
26-
# print(c[0].__str__() + '\n' + c[1].__str__())
27-
# print('*'*30)
43+
command_line_word = get_input_word_from_command_line()
44+
if command_line_word:
45+
cyk_parser.parse(command_line_word)
46+
47+
else:
48+
word = ' '
49+
while word:
50+
word = input('Enter an input word or sentence (or just press Enter to exit): ')
51+
if word:
52+
cyk_parser.parse(word)
53+
else:
54+
print('\nNo word entered this time.')
55+
56+
print('\nSEE YOU SPACE COWBOY...\n')
57+
2858

2959

3060

0 commit comments

Comments
 (0)