42 lines
1.8 KiB
Markdown
42 lines
1.8 KiB
Markdown
![]() |
# Formalang
|
|||
|
```c++
|
|||
|
#include "regular/RegularTree.hpp"
|
|||
|
#include "NFA/NFAGraph.hpp"
|
|||
|
#include "DFA/DFAGraph.hpp"
|
|||
|
#include "converters/RegularToNFA.hpp"
|
|||
|
#include "converters/NFAToDFA.hpp"
|
|||
|
#include "converters/DFAToFDFA.hpp"
|
|||
|
#include "converters/DFAToMinDFA.hpp"
|
|||
|
#include "converters/DFAToRegular.hpp"
|
|||
|
#include "converters/InvertFDFA.hpp"
|
|||
|
|
|||
|
using namespace regular;
|
|||
|
using namespace NFA;
|
|||
|
using namespace DFA;
|
|||
|
using namespace converters;
|
|||
|
```
|
|||
|
так можно подключить все что есть в моей программе.
|
|||
|
```c++
|
|||
|
RegularTree r("a*"); // Регулярное выражение
|
|||
|
NFAGraph NFA_tree = RegularToNFAGraph(std::move(r)); // В НКА
|
|||
|
DFAGraph DFA_graph = NFAGraphToDFAGraph(std::move(NFA_tree)); // В ДКА
|
|||
|
DFA_graph = DFAGraphToMinDFAGraph(std::move(DFA_graph)); // Минимизация
|
|||
|
DFA_graph.Print(); // Мой вывод
|
|||
|
DFA_graph.CreateDotFile("2.dot"); // Вывод в dot файл
|
|||
|
std::string reg = DFAGraphToRegular(std::move(DFA_graph)); // В регулярку
|
|||
|
```
|
|||
|
Такой вывод в регулярку как показано в прошлом примере сделает много лишних скобок, если мы хотим привести к более нормальному виду, то можно сделать так
|
|||
|
```c++
|
|||
|
RegularTree(reg).ToString() // Получится более красивая регулярка
|
|||
|
```
|
|||
|
Про сами регулярки + * - это плюс и звезда Клини. Их можно писать после слов, или после скобок.
|
|||
|
abacaba* ~ (abacaba)\*. a(b)a\* ~ a(b)(a)\*. Для сложения языков используется |. Символом пустого слова является пробел.
|
|||
|
|
|||
|
Примеры регулярок
|
|||
|
|
|||
|
a*
|
|||
|
|
|||
|
a(b)+a
|
|||
|
|
|||
|
(a|b)*
|