/
NFADotGeneratorTest.kt
116 lines (106 loc) · 4.32 KB
/
NFADotGeneratorTest.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
package cz.bnf.playground.nfa
import cz.bnf.playground.dot.DotGenerator
import cz.bnf.playground.nfa.dot.NFADotGenerator
import org.junit.jupiter.api.Assertions
import org.junit.jupiter.api.Test
import java.io.File
class NFADotGeneratorTest {
@Test
fun testDotGenerator1() {
val text = """
<int> ::= "ab" [0-9]+ "c"
""".trimIndent()
val output = File("output/dot_expression1.dot")
output.delete()
val node2 = NFADotGenerator().generate(text)
DotGenerator().generate(output, node2, title = "dot_expression1", DotGenerator.RANK_DIR_LR)
Assertions.assertTrue(output.exists())
}
@Test
fun testDotGenerator2() {
val text = """
<int> ::= "ab" [0-9]* "c"
""".trimIndent()
val output = File("output/dot_expression2.dot")
output.delete()
val node = NFADotGenerator().generate(text)
DotGenerator().generate(output, node, title = "dot_expression2", DotGenerator.RANK_DIR_LR)
Assertions.assertTrue(output.exists())
}
@Test
fun testDotGenerator3() {
val text = """
<int> ::= "ab" [0-9]? "c"
""".trimIndent()
val output = File("output/dot_expression3.dot")
output.delete()
val node = NFADotGenerator().generate(text)
DotGenerator().generate(output, node, title = "dot_expression3", DotGenerator.RANK_DIR_LR)
Assertions.assertTrue(output.exists())
}
@Test
fun testDotGenerator4() {
val text = """
<var_name> ::= ([a-z] | [A-Z] | "_" | [0-9])+
<var_list> ::= <var_name> "," <var_list> | <var_name>
""".trimIndent()
val output = File("output/dot_expression4.dot")
output.delete()
val node = NFADotGenerator().generate(text)
DotGenerator().generate(output, node, title = "dot_expression4", DotGenerator.RANK_DIR_LR)
Assertions.assertTrue(output.exists())
}
@Test
fun testDotGenerator5() {
val text = """
<int> ::= [0-9]+
<factor> ::= <int> | "(" <expr> ")"
<term> ::= <factor> (("*" | "/" ) <factor>)*
<expr> ::= <term> (("+" | "-") <term>)*
""".trimIndent()
val output = File("output/dot_expression5.dot")
output.delete()
val node = NFADotGenerator().generate(text)
DotGenerator().generate(output, node, title = "dot_expression5", DotGenerator.RANK_DIR_LR)
Assertions.assertTrue(output.exists())
}
@Test
fun testDotGenerator6() {
val text = """
<num> ::= [0-9]+
<factor> ::= "+" | "-" | <num> | "(" <expr> ")" | <var_name>
<term> ::= <factor> (("+" | "-") <factor>)
<expr> ::= <term> (("*" | "/" ) <term>)
<var_name> ::= ([a-z] | [A-Z])+
<def_type> ::= "INTEGER" | "REAL"
<var_list> ::= <var_name> "," <var_list> | <var_name>
<variable_declaration> ::= <var_list> ":" <def_type>
<assignment_statement> ::= <var_name> ":" <expr>
<compound_statement> ::= "BEGIN" <statement_list> "END"
<statement> ::= <assignment_statement> | <compound_statement>
<statement_list> ::= <statement> ";" <statement_list> | <statement>
<block> ::= "VAR" (<variable_declaration> ";")+
<program> ::= "PROGRAM" <var_name> ";" <block>? <compound_statement> "."
""".trimIndent()
val output = File("output/dot_expression6.dot")
output.delete()
val node = NFADotGenerator().generate(text)
DotGenerator().generate(output, node, title = "dot_expression6", DotGenerator.RANK_DIR_LR)
Assertions.assertTrue(output.exists())
}
@Test
fun testDotGenerator7() {
val text = """
<var> ::= ([a-z] | [A-Z] | [0-9] | "_" | "-" | ".")+
<attribute> ::= (<var> ":")? <var> "=" '"' <var> '"'
<element> ::= "<" <var> <attribute>* "/>" | "<" <var> <attribute>* ">" <var> "</" <var> ">" | "<" <var> <attribute>* ">" <element>+ "</" <var> ">"
<xml_declaration> ::= "<?" <attribute>+ "?>"
<doc> ::= <xml_declaration> <element>
""".trimIndent()
val output = File("output/dot_expression7.dot")
output.delete()
val node = NFADotGenerator().generate(text)
DotGenerator().generate(output, node, title = "dot_expression7", DotGenerator.RANK_DIR_LR)
Assertions.assertTrue(output.exists())
}
}