Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
fja
eval
Commits
3710e7f4
Commit
3710e7f4
authored
Mar 13, 2020
by
Kateřina Sloupová
Browse files
fixes in DFA minimization and canonization
parent
cf7390c3
Pipeline
#55264
failed with stage
in 19 seconds
Changes
9
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
DFA_grammar.g4
View file @
3710e7f4
...
...
@@ -23,7 +23,7 @@ RIGHT_PARENTHESIS : ')';
LEFT_BRACKET : '{';
RIGHT_BRACKET : '}';
COMMA : ',';
FINAL : ('final'
| 'F'
);
FINAL : ('final');
STATE : [a-zA-Z0-9]+;
/* Characters to be ignored */
...
...
DFA_grammarLexer.interp
View file @
3710e7f4
...
...
@@ -44,4 +44,4 @@ mode names:
DEFAULT_MODE
atn:
[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 12, 60, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 47, 10, 9, 3, 10, 6, 10, 50, 10, 10, 13, 10, 14, 10, 51, 3, 11, 6, 11, 55, 10, 11, 13, 11, 14, 11, 56, 3, 11, 3, 11, 2, 2, 12, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 3, 2, 4, 5, 2, 50, 59, 67, 92, 99, 124, 5, 2, 11, 12, 15, 15, 34, 34, 2, 62, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 3, 23, 3, 2, 2, 2, 5, 28, 3, 2, 2, 2, 7, 30, 3, 2, 2, 2, 9, 32, 3, 2, 2, 2, 11, 34, 3, 2, 2, 2, 13, 36, 3, 2, 2, 2, 15, 38, 3, 2, 2, 2, 17, 46, 3, 2, 2, 2, 19, 49, 3, 2, 2, 2, 21, 54, 3, 2, 2, 2, 23, 24, 7, 107, 2, 2, 24, 25, 7, 112, 2, 2, 25, 26, 7, 107, 2, 2, 26, 27, 7, 118, 2, 2, 27, 4, 3, 2, 2, 2, 28, 29, 7, 63, 2, 2, 29, 6, 3, 2, 2, 2, 30, 31, 7, 42, 2, 2, 31, 8, 3, 2, 2, 2, 32, 33, 7, 43, 2, 2, 33, 10, 3, 2, 2, 2, 34, 35, 7, 125, 2, 2, 35, 12, 3, 2, 2, 2, 36, 37, 7, 127, 2, 2, 37, 14, 3, 2, 2, 2, 38, 39, 7, 46, 2, 2, 39, 16, 3, 2, 2, 2, 40, 41, 7, 104, 2, 2, 41, 42, 7, 107, 2, 2, 42, 43, 7, 112, 2, 2, 43, 44, 7, 99, 2, 2, 44, 47, 7, 110, 2, 2, 45, 47, 7, 72, 2, 2, 46, 40, 3, 2, 2, 2, 46, 45, 3, 2, 2, 2, 47, 18, 3, 2, 2, 2, 48, 50, 9, 2, 2, 2, 49, 48, 3, 2, 2, 2, 50, 51, 3, 2, 2, 2, 51, 49, 3, 2, 2, 2, 51, 52, 3, 2, 2, 2, 52, 20, 3, 2, 2, 2, 53, 55, 9, 3, 2, 2, 54, 53, 3, 2, 2, 2, 55, 56, 3, 2, 2, 2, 56, 54, 3, 2, 2, 2, 56, 57, 3, 2, 2, 2, 57, 58, 3, 2, 2, 2, 58, 59, 8, 11, 2, 2, 59, 22, 3, 2, 2, 2, 6, 2, 46, 51, 56, 3, 8, 2, 2]
\ No newline at end of file
[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 12, 58, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 10, 6, 10, 48, 10, 10, 13, 10, 14, 10, 49, 3, 11, 6, 11, 53, 10, 11, 13, 11, 14, 11, 54, 3, 11, 3, 11, 2, 2, 12, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 3, 2, 4, 5, 2, 50, 59, 67, 92, 99, 124, 5, 2, 11, 12, 15, 15, 34, 34, 2, 59, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 3, 23, 3, 2, 2, 2, 5, 28, 3, 2, 2, 2, 7, 30, 3, 2, 2, 2, 9, 32, 3, 2, 2, 2, 11, 34, 3, 2, 2, 2, 13, 36, 3, 2, 2, 2, 15, 38, 3, 2, 2, 2, 17, 40, 3, 2, 2, 2, 19, 47, 3, 2, 2, 2, 21, 52, 3, 2, 2, 2, 23, 24, 7, 107, 2, 2, 24, 25, 7, 112, 2, 2, 25, 26, 7, 107, 2, 2, 26, 27, 7, 118, 2, 2, 27, 4, 3, 2, 2, 2, 28, 29, 7, 63, 2, 2, 29, 6, 3, 2, 2, 2, 30, 31, 7, 42, 2, 2, 31, 8, 3, 2, 2, 2, 32, 33, 7, 43, 2, 2, 33, 10, 3, 2, 2, 2, 34, 35, 7, 125, 2, 2, 35, 12, 3, 2, 2, 2, 36, 37, 7, 127, 2, 2, 37, 14, 3, 2, 2, 2, 38, 39, 7, 46, 2, 2, 39, 16, 3, 2, 2, 2, 40, 41, 7, 104, 2, 2, 41, 42, 7, 107, 2, 2, 42, 43, 7, 112, 2, 2, 43, 44, 7, 99, 2, 2, 44, 45, 7, 110, 2, 2, 45, 18, 3, 2, 2, 2, 46, 48, 9, 2, 2, 2, 47, 46, 3, 2, 2, 2, 48, 49, 3, 2, 2, 2, 49, 47, 3, 2, 2, 2, 49, 50, 3, 2, 2, 2, 50, 20, 3, 2, 2, 2, 51, 53, 9, 3, 2, 2, 52, 51, 3, 2, 2, 2, 53, 54, 3, 2, 2, 2, 54, 52, 3, 2, 2, 2, 54, 55, 3, 2, 2, 2, 55, 56, 3, 2, 2, 2, 56, 57, 8, 11, 2, 2, 57, 22, 3, 2, 2, 2, 5, 2, 49, 54, 3, 8, 2, 2]
\ No newline at end of file
DFA_grammarLexer.py
View file @
3710e7f4
...
...
@@ -9,27 +9,26 @@ import sys
def
serializedATN
():
with
StringIO
()
as
buf
:
buf
.
write
(
"
\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\f
"
)
buf
.
write
(
"
<
\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7
"
)
buf
.
write
(
"
:
\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7
"
)
buf
.
write
(
"
\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\3\2\3\2\3\2\3\2\3\2
"
)
buf
.
write
(
"
\3\3\3\3\3\4\3\4\3\5\3\5\3\6\3\6\3\7\3\7\3\b\3\b\3\t\3
"
)
buf
.
write
(
"
\t\3\t\3\t\3\t\3\t\5\t
/
\n\t\3\n\6\n\62\n\n\r\n\16\n\63
"
)
buf
.
write
(
"
\3\13\6\13\67\n\13\r\13\16\13
8
\3\13\3\13\2\2\f\3\3\5\4
"
)
buf
.
write
(
"
\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f\3\2\4\5\2\62
;C"
)
buf
.
write
(
"
\\
c|
\5\2\13\f\17\17\"\"\2
>
\2\3\3\2\2\2\2\5\3\2\2\2\2\7
"
)
buf
.
write
(
"
\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2
"
)
buf
.
write
(
"
\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\3\27\3\2\2
"
)
buf
.
write
(
"
\2\5\34\3\2\2\2\7\36\3\2\2\2\t
\3\2\2\2\13\"\3\2\2\2\r
"
)
buf
.
write
(
"$
\3\2\2\2\17
&
\3\2\2\2\21
.
\3\2\2\2\23\61\3\2\2\2\25\66
"
)
buf
.
write
(
"
\3\2\2\2\27\30\7
k
\2\2\30\31\7
p
\2\2\31\32\7
k
\2\2\32\33
"
)
buf
.
write
(
"
\7
v
\2\2\33\4\3\2\2\2\34\35\7
?
\2\2\35\6\3\2\2\2\36\37\7
"
)
buf
.
write
(
"*
\2\2\37\b\3\2\2\2
!
\7
+
\2\2
!
\n\3\2\2\2\"
#
\7
}
\2\2
#
\f\3
"
)
buf
.
write
(
"
\2\2\2
$%
\7\177\2\2
%
\16\3\2\2\2
&
\'\7
.
\2\2\'\20\3\2\2\2
"
)
buf
.
write
(
"()
\7
h
\2\2
)*
\7
k
\2\2
*+
\7
p
\2\2
+,
\7
c
\2\2
,/
\7
n
\2\2
-/
\7
H
\2\2
"
)
buf
.
write
(
".(
\3\2\2\2
.-
\3\2\2\2
/
\22\3\2\2\2\60\62\t\2\2\2\61\60\3
"
)
buf
.
write
(
"
\2\2\2\62\63\3\2\2\2\63\61\3\2\2\2\63\64\3\2\2\2\64\24
"
)
buf
.
write
(
"
\3\2\2\2\65\67\t\3\2\2\66\65\3\2\2\2\67
8
\3\2\2\2
8
\66\3
"
)
buf
.
write
(
"
\2\2\2
89
\3\2\2\2
9:
\3\2\2\2
:;
\b\13\2\2
;
\26\3\2\2\2\6\2
"
)
buf
.
write
(
".
\63
8
\3\b\2\2
"
)
buf
.
write
(
"
\t\3\t\3\t\3\t\3\t\3\n\6\n\60\n\n\r\n\16\n\61\3\13\6\13
"
)
buf
.
write
(
"
\65\n\13\r\13\16\13\66\3\13\3\13\2\2\f\3\3\5\4\7\5\t\6
"
)
buf
.
write
(
"
\13\7\r\b\17\t\21\n\23\13\25\f\3\2\4\5\2\62
;C
\\
c|
\5\2
"
)
buf
.
write
(
"
\13\f\17\17\"\"\2
;
\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2
"
)
buf
.
write
(
"
\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21
"
)
buf
.
write
(
"
\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\3\27\3\2\2\2\5\34\3
"
)
buf
.
write
(
"
\2\2\2\7\36\3\2\2\2\t
\3\2\2\2\13\"\3\2\2\2\r
$
\3\2\2\2
"
)
buf
.
write
(
"
\17
&
\3\2\2\2\21
(
\3\2\2\2\23
/
\3\2\2\2\25\64\3\2\2\2\27
"
)
buf
.
write
(
"
\30\7
k
\2\2\30\31\7
p
\2\2\31\32\7
k
\2\2\32\33\7
v
\2\2\33\4
"
)
buf
.
write
(
"
\3\2\2\2\34\35\7
?
\2\2\35\6\3\2\2\2\36\37\7
*
\2\2\37\b\3
"
)
buf
.
write
(
"
\2\2\2
!
\7
+
\2\2
!
\n\3\2\2\2\"
#
\7
}
\2\2
#
\f\3\2\2\2
$%
\7\177
"
)
buf
.
write
(
"
\2\2
%
\16\3\2\2\2
&
\'\7
.
\2\2\'\20\3\2\2\2
()
\7
h
\2\2
)*
\7
k"
)
buf
.
write
(
"
\2\2
*+
\7
p
\2\2
+,
\7
c
\2\2
,-
\7
n
\2\2
-
\22\3\2\2\2
.
\60\t\2\2
"
)
buf
.
write
(
"
\2
/.
\3\2\2\2\60\61\3\2\2\2\61
/
\3\2\2\2\61\62\3\2\2\2\62
"
)
buf
.
write
(
"
\24\3\2\2\2\63\65\t\3\2\2\64\63\3\2\2\2\65\66\3\2\2\2
"
)
buf
.
write
(
"
\66\64\3\2\2\2\66\67\3\2\2\2\67
8
\3\2\2\2
89
\b\13\2\2
9
\26
"
)
buf
.
write
(
"
\3\2\2\2\5\2\61\66\3\b\2\2
"
)
return
buf
.
getvalue
()
...
...
NFA_grammar.g4
View file @
3710e7f4
...
...
@@ -25,7 +25,7 @@ RIGHT_PARENTHESIS : ')';
LEFT_BRACKET : '{';
RIGHT_BRACKET : '}';
COMMA : ',';
FINAL : ('final'
| 'F'
);
FINAL : ('final');
STATE : [a-zA-Z0-9]+;
/* Characters to be ignored */
...
...
NFA_grammarLexer.interp
View file @
3710e7f4
...
...
@@ -44,4 +44,4 @@ mode names:
DEFAULT_MODE
atn:
[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 12, 60, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 47, 10, 9, 3, 10, 6, 10, 50, 10, 10, 13, 10, 14, 10, 51, 3, 11, 6, 11, 55, 10, 11, 13, 11, 14, 11, 56, 3, 11, 3, 11, 2, 2, 12, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 3, 2, 4, 5, 2, 50, 59, 67, 92, 99, 124, 5, 2, 11, 12, 15, 15, 34, 34, 2, 62, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 3, 23, 3, 2, 2, 2, 5, 28, 3, 2, 2, 2, 7, 30, 3, 2, 2, 2, 9, 32, 3, 2, 2, 2, 11, 34, 3, 2, 2, 2, 13, 36, 3, 2, 2, 2, 15, 38, 3, 2, 2, 2, 17, 46, 3, 2, 2, 2, 19, 49, 3, 2, 2, 2, 21, 54, 3, 2, 2, 2, 23, 24, 7, 107, 2, 2, 24, 25, 7, 112, 2, 2, 25, 26, 7, 107, 2, 2, 26, 27, 7, 118, 2, 2, 27, 4, 3, 2, 2, 2, 28, 29, 7, 63, 2, 2, 29, 6, 3, 2, 2, 2, 30, 31, 7, 42, 2, 2, 31, 8, 3, 2, 2, 2, 32, 33, 7, 43, 2, 2, 33, 10, 3, 2, 2, 2, 34, 35, 7, 125, 2, 2, 35, 12, 3, 2, 2, 2, 36, 37, 7, 127, 2, 2, 37, 14, 3, 2, 2, 2, 38, 39, 7, 46, 2, 2, 39, 16, 3, 2, 2, 2, 40, 41, 7, 104, 2, 2, 41, 42, 7, 107, 2, 2, 42, 43, 7, 112, 2, 2, 43, 44, 7, 99, 2, 2, 44, 47, 7, 110, 2, 2, 45, 47, 7, 72, 2, 2, 46, 40, 3, 2, 2, 2, 46, 45, 3, 2, 2, 2, 47, 18, 3, 2, 2, 2, 48, 50, 9, 2, 2, 2, 49, 48, 3, 2, 2, 2, 50, 51, 3, 2, 2, 2, 51, 49, 3, 2, 2, 2, 51, 52, 3, 2, 2, 2, 52, 20, 3, 2, 2, 2, 53, 55, 9, 3, 2, 2, 54, 53, 3, 2, 2, 2, 55, 56, 3, 2, 2, 2, 56, 54, 3, 2, 2, 2, 56, 57, 3, 2, 2, 2, 57, 58, 3, 2, 2, 2, 58, 59, 8, 11, 2, 2, 59, 22, 3, 2, 2, 2, 6, 2, 46, 51, 56, 3, 8, 2, 2]
\ No newline at end of file
[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 12, 58, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 10, 6, 10, 48, 10, 10, 13, 10, 14, 10, 49, 3, 11, 6, 11, 53, 10, 11, 13, 11, 14, 11, 54, 3, 11, 3, 11, 2, 2, 12, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 3, 2, 4, 5, 2, 50, 59, 67, 92, 99, 124, 5, 2, 11, 12, 15, 15, 34, 34, 2, 59, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 3, 23, 3, 2, 2, 2, 5, 28, 3, 2, 2, 2, 7, 30, 3, 2, 2, 2, 9, 32, 3, 2, 2, 2, 11, 34, 3, 2, 2, 2, 13, 36, 3, 2, 2, 2, 15, 38, 3, 2, 2, 2, 17, 40, 3, 2, 2, 2, 19, 47, 3, 2, 2, 2, 21, 52, 3, 2, 2, 2, 23, 24, 7, 107, 2, 2, 24, 25, 7, 112, 2, 2, 25, 26, 7, 107, 2, 2, 26, 27, 7, 118, 2, 2, 27, 4, 3, 2, 2, 2, 28, 29, 7, 63, 2, 2, 29, 6, 3, 2, 2, 2, 30, 31, 7, 42, 2, 2, 31, 8, 3, 2, 2, 2, 32, 33, 7, 43, 2, 2, 33, 10, 3, 2, 2, 2, 34, 35, 7, 125, 2, 2, 35, 12, 3, 2, 2, 2, 36, 37, 7, 127, 2, 2, 37, 14, 3, 2, 2, 2, 38, 39, 7, 46, 2, 2, 39, 16, 3, 2, 2, 2, 40, 41, 7, 104, 2, 2, 41, 42, 7, 107, 2, 2, 42, 43, 7, 112, 2, 2, 43, 44, 7, 99, 2, 2, 44, 45, 7, 110, 2, 2, 45, 18, 3, 2, 2, 2, 46, 48, 9, 2, 2, 2, 47, 46, 3, 2, 2, 2, 48, 49, 3, 2, 2, 2, 49, 47, 3, 2, 2, 2, 49, 50, 3, 2, 2, 2, 50, 20, 3, 2, 2, 2, 51, 53, 9, 3, 2, 2, 52, 51, 3, 2, 2, 2, 53, 54, 3, 2, 2, 2, 54, 52, 3, 2, 2, 2, 54, 55, 3, 2, 2, 2, 55, 56, 3, 2, 2, 2, 56, 57, 8, 11, 2, 2, 57, 22, 3, 2, 2, 2, 5, 2, 49, 54, 3, 8, 2, 2]
\ No newline at end of file
NFA_grammarLexer.py
View file @
3710e7f4
...
...
@@ -9,27 +9,26 @@ import sys
def
serializedATN
():
with
StringIO
()
as
buf
:
buf
.
write
(
"
\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\f
"
)
buf
.
write
(
"
<
\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7
"
)
buf
.
write
(
"
:
\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7
"
)
buf
.
write
(
"
\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\3\2\3\2\3\2\3\2\3\2
"
)
buf
.
write
(
"
\3\3\3\3\3\4\3\4\3\5\3\5\3\6\3\6\3\7\3\7\3\b\3\b\3\t\3
"
)
buf
.
write
(
"
\t\3\t\3\t\3\t\3\t\5\t
/
\n\t\3\n\6\n\62\n\n\r\n\16\n\63
"
)
buf
.
write
(
"
\3\13\6\13\67\n\13\r\13\16\13
8
\3\13\3\13\2\2\f\3\3\5\4
"
)
buf
.
write
(
"
\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f\3\2\4\5\2\62
;C"
)
buf
.
write
(
"
\\
c|
\5\2\13\f\17\17\"\"\2
>
\2\3\3\2\2\2\2\5\3\2\2\2\2\7
"
)
buf
.
write
(
"
\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2
"
)
buf
.
write
(
"
\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\3\27\3\2\2
"
)
buf
.
write
(
"
\2\5\34\3\2\2\2\7\36\3\2\2\2\t
\3\2\2\2\13\"\3\2\2\2\r
"
)
buf
.
write
(
"$
\3\2\2\2\17
&
\3\2\2\2\21
.
\3\2\2\2\23\61\3\2\2\2\25\66
"
)
buf
.
write
(
"
\3\2\2\2\27\30\7
k
\2\2\30\31\7
p
\2\2\31\32\7
k
\2\2\32\33
"
)
buf
.
write
(
"
\7
v
\2\2\33\4\3\2\2\2\34\35\7
?
\2\2\35\6\3\2\2\2\36\37\7
"
)
buf
.
write
(
"*
\2\2\37\b\3\2\2\2
!
\7
+
\2\2
!
\n\3\2\2\2\"
#
\7
}
\2\2
#
\f\3
"
)
buf
.
write
(
"
\2\2\2
$%
\7\177\2\2
%
\16\3\2\2\2
&
\'\7
.
\2\2\'\20\3\2\2\2
"
)
buf
.
write
(
"()
\7
h
\2\2
)*
\7
k
\2\2
*+
\7
p
\2\2
+,
\7
c
\2\2
,/
\7
n
\2\2
-/
\7
H
\2\2
"
)
buf
.
write
(
".(
\3\2\2\2
.-
\3\2\2\2
/
\22\3\2\2\2\60\62\t\2\2\2\61\60\3
"
)
buf
.
write
(
"
\2\2\2\62\63\3\2\2\2\63\61\3\2\2\2\63\64\3\2\2\2\64\24
"
)
buf
.
write
(
"
\3\2\2\2\65\67\t\3\2\2\66\65\3\2\2\2\67
8
\3\2\2\2
8
\66\3
"
)
buf
.
write
(
"
\2\2\2
89
\3\2\2\2
9:
\3\2\2\2
:;
\b\13\2\2
;
\26\3\2\2\2\6\2
"
)
buf
.
write
(
".
\63
8
\3\b\2\2
"
)
buf
.
write
(
"
\t\3\t\3\t\3\t\3\t\3\n\6\n\60\n\n\r\n\16\n\61\3\13\6\13
"
)
buf
.
write
(
"
\65\n\13\r\13\16\13\66\3\13\3\13\2\2\f\3\3\5\4\7\5\t\6
"
)
buf
.
write
(
"
\13\7\r\b\17\t\21\n\23\13\25\f\3\2\4\5\2\62
;C
\\
c|
\5\2
"
)
buf
.
write
(
"
\13\f\17\17\"\"\2
;
\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2
"
)
buf
.
write
(
"
\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21
"
)
buf
.
write
(
"
\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\3\27\3\2\2\2\5\34\3
"
)
buf
.
write
(
"
\2\2\2\7\36\3\2\2\2\t
\3\2\2\2\13\"\3\2\2\2\r
$
\3\2\2\2
"
)
buf
.
write
(
"
\17
&
\3\2\2\2\21
(
\3\2\2\2\23
/
\3\2\2\2\25\64\3\2\2\2\27
"
)
buf
.
write
(
"
\30\7
k
\2\2\30\31\7
p
\2\2\31\32\7
k
\2\2\32\33\7
v
\2\2\33\4
"
)
buf
.
write
(
"
\3\2\2\2\34\35\7
?
\2\2\35\6\3\2\2\2\36\37\7
*
\2\2\37\b\3
"
)
buf
.
write
(
"
\2\2\2
!
\7
+
\2\2
!
\n\3\2\2\2\"
#
\7
}
\2\2
#
\f\3\2\2\2
$%
\7\177
"
)
buf
.
write
(
"
\2\2
%
\16\3\2\2\2
&
\'\7
.
\2\2\'\20\3\2\2\2
()
\7
h
\2\2
)*
\7
k"
)
buf
.
write
(
"
\2\2
*+
\7
p
\2\2
+,
\7
c
\2\2
,-
\7
n
\2\2
-
\22\3\2\2\2
.
\60\t\2\2
"
)
buf
.
write
(
"
\2
/.
\3\2\2\2\60\61\3\2\2\2\61
/
\3\2\2\2\61\62\3\2\2\2\62
"
)
buf
.
write
(
"
\24\3\2\2\2\63\65\t\3\2\2\64\63\3\2\2\2\65\66\3\2\2\2
"
)
buf
.
write
(
"
\66\64\3\2\2\2\66\67\3\2\2\2\67
8
\3\2\2\2
89
\b\13\2\2
9
\26
"
)
buf
.
write
(
"
\3\2\2\2\5\2\61\66\3\b\2\2
"
)
return
buf
.
getvalue
()
...
...
demo.py
View file @
3710e7f4
...
...
@@ -258,7 +258,7 @@ def main():
print
(
parser
.
dfa_to_str
(
dfa_p
))
print
()
print
(
"Try equality of automata from strings:"
)
str1
=
"init=0 (0, a)=1 (0, b)=2 (1, a)=1 (2,b)=2
F
={1,2}"
str1
=
"init=0 (0, a)=1 (0, b)=2 (1, a)=1 (2,b)=2
final
={1,2}"
str2
=
"init=q1 (q1, a)=q2 (q1, b)=q3 (q2,a)=q2 (q3,b)=q4 (q4,b)=q4 final={q3,q4,q2}"
print
(
dfa_eq
(
str1
,
str2
))
print
()
...
...
fja_checker.py
View file @
3710e7f4
...
...
@@ -27,18 +27,28 @@ def check_task(dfa: DFA, task: str) -> bool:
print
(
"DFA není totální."
)
return
False
el
if
task
==
"MIN"
and
not
dfa
.
is_minimal
():
if
task
==
"MIN"
and
not
dfa
.
is_minimal
():
print
(
"DFA není minimální."
)
return
False
elif
task
==
"CAN"
:
return
dfa
.
is_canonical
()
not_canonical
=
not
dfa
.
is_canonical
()
if
task
==
"CAN"
and
not_canonical
:
print
(
"DFA není kanonický."
)
return
False
elif
task
==
"TOC"
:
return
dfa
.
is_total
()
and
dfa
.
is_canonical
()
if
task
==
"TOC"
and
(
not
dfa
.
is_total
()
or
not_canonical
):
if
not
dfa
.
is_total
():
print
(
"DFA není totální."
)
if
not_canonical
:
print
(
"DFA není kanonický."
)
return
False
elif
task
==
"MIC"
:
return
dfa
.
is_minimal
()
and
dfa
.
is_canonical
()
if
task
==
"MIC"
and
(
not
dfa
.
is_minimal
()
or
not_canonical
):
if
not
dfa
.
is_minimal
():
print
(
"DFA není minimální."
)
if
not_canonical
:
print
(
"DFA není kanonický."
)
return
False
#elif solution_type == "EFA":
# parser = Parser()
...
...
@@ -98,7 +108,7 @@ def main():
exit
(
1
)
except
Exception
as
ex
:
print
(
"Error inside of fja_checker:"
,
ex
.
args
)
exit
(
1
)
#print(ex)
main
()
\ No newline at end of file
reg_automata.py
View file @
3710e7f4
...
...
@@ -4,6 +4,7 @@ from enum import Enum
import
enum
from
copy
import
deepcopy
from
collections
import
deque
from
string
import
ascii_uppercase
class
Composition
(
Enum
):
...
...
@@ -13,14 +14,14 @@ class Composition(Enum):
class
IsEmptyResult
:
def
__init__
(
self
,
counterexample
:
Optional
[
...
]
=
None
):
def
__init__
(
self
,
counterexample
:
Optional
[
str
]
=
None
):
self
.
counterexample
=
counterexample
def
__bool__
(
self
):
return
self
.
counterexample
is
None
class
IsEquivalentResult
:
def
__init__
(
self
,
left_counterexample
:
Optional
[
...
]
=
None
,
right_counterexample
:
Optional
[
...
]
=
None
):
def
__init__
(
self
,
left_counterexample
:
Optional
[
str
]
=
None
,
right_counterexample
:
Optional
[
str
]
=
None
):
self
.
left_counterexample
=
left_counterexample
self
.
right_counterexample
=
right_counterexample
...
...
@@ -299,6 +300,8 @@ class DFA:
return
dfa
def
rename_state
(
self
,
rename
:
State
,
name
:
str
):
if
name
==
rename
.
name
:
return
new_state
=
State
(
name
)
self
.
states
.
add
(
new_state
)
self
.
states
.
remove
(
rename
)
...
...
@@ -323,24 +326,23 @@ class DFA:
self
.
transition
=
transition
def
canonize
(
self
)
->
DFA
:
# TODO total?
dfa
=
deepcopy
(
self
)
remain
=
deepcopy
(
self
.
states
)
characters
=
dfa
.
sort_characters
()
i
=
0
queue
=
[
dfa
.
init
]
# TODO deque
queue
=
deque
(
[
dfa
.
init
]
)
# TODO deque
while
len
(
queue
)
>
0
:
actual
=
queue
.
pop
(
0
)
actual
=
queue
.
popleft
()
if
actual
in
remain
:
remain
.
remove
(
actual
)
for
character
in
characters
:
state
=
dfa
.
transition
[
actual
,
character
]
if
state
in
remain
:
queue
.
append
(
state
)
remain
.
remove
(
state
)
if
(
actual
,
character
)
in
dfa
.
transition
and
dfa
.
transition
[
actual
,
character
]
in
remain
:
queue
.
append
(
dfa
.
transition
[
actual
,
character
])
remain
.
remove
(
dfa
.
transition
[
actual
,
character
])
dfa
.
rename_state
(
actual
,
str
(
i
)
)
dfa
.
rename_state
(
actual
,
ascii_uppercase
[
i
]
)
i
+=
1
return
dfa
...
...
@@ -390,7 +392,7 @@ class DFA:
return
reg
def
is_empty
(
self
)
->
bool
:
def
is_empty
(
self
)
->
IsEmptyResult
:
reached
:
Deque
[
State
]
=
deque
([
self
.
init
])
reachable
:
Set
[
State
]
=
{
self
.
init
}
predecessor
:
Dict
[
State
,
Tuple
[
State
,
Character
]]
=
{}
...
...
@@ -433,6 +435,12 @@ class DFA:
return
result
def
is_part_identical
(
self
,
dfa
:
DFA
)
->
bool
:
# print(self.states == dfa.states)
# print(self.characters == dfa.characters)
# print(len(self.transition), len(dfa.transition))
# print(self.transition == dfa.transition)
# print(self.init == dfa.init)
# print(self.final == dfa.final)
return
self
.
states
==
dfa
.
states
and
self
.
characters
==
dfa
.
characters
and
\
self
.
transition
==
dfa
.
transition
and
self
.
init
==
dfa
.
init
and
\
self
.
final
==
dfa
.
final
...
...
@@ -444,6 +452,10 @@ class DFA:
def
is_canonical
(
self
)
->
bool
:
canonic
=
self
.
canonize
()
#import parser as par
#parser = par.Parser()
#print(parser.dfa_to_str(self))
#print(parser.dfa_to_str(canonic))
return
self
.
is_part_identical
(
canonic
)
class
NFA
:
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment