Skip to content

Commit c371af4

Browse files
committed
mata: do not require state type for parsing
1 parent dc2a2c0 commit c371af4

3 files changed

Lines changed: 17 additions & 17 deletions

File tree

‎serialization/mata/src/main/java/net/automatalib/serialization/mata/parser/MataNFAParser.java‎

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,12 @@
3232
* Parser for reading {@link NFA}s from the <a
3333
* href="https://github.com/VeriFIT/mata/blob/devel/AUTOMATAFORMAT.md">NFA-explicit</a> format.
3434
*
35-
* @param <S>
36-
* state type
3735
* @param <I>
3836
* input symbol type
3937
* @param <A>
4038
* concrete automaton type
4139
*/
42-
public class MataNFAParser<S, I, A extends MutableNFA<S, I>> implements InputModelDeserializer<I, A> {
40+
public class MataNFAParser<I, A extends MutableNFA<?, I>> implements InputModelDeserializer<I, A> {
4341

4442
private final AutomatonCreator<A, I> creator;
4543
private final Function<String, I> symbolParser;
@@ -73,8 +71,6 @@ public InputModelData<I, A> readModel(InputStream is) throws IOException, Format
7371
* the creator of the concrete NFA instance
7472
* @param symbolParser
7573
* the parser for transforming (string-based) labels to concrete input symbols
76-
* @param <S>
77-
* state type
7874
* @param <I>
7975
* input symbol type
8076
* @param <A>
@@ -85,9 +81,9 @@ public InputModelData<I, A> readModel(InputStream is) throws IOException, Format
8581
* @throws FormatException
8682
* if the content of the stream was not in the expected format
8783
*/
88-
public static <S, I, A extends MutableNFA<S, I>> InputModelData<I, A> parse(Reader reader,
89-
AutomatonCreator<A, I> creator,
90-
Function<String, I> symbolParser)
84+
public static <I, A extends MutableNFA<?, I>> InputModelData<I, A> parse(Reader reader,
85+
AutomatonCreator<A, I> creator,
86+
Function<String, I> symbolParser)
9187
throws FormatException {
9288

9389
final ExplicitMataParser parser = new ExplicitMataParser(reader);

‎serialization/mata/src/main/javacc/mata-explicit.jj‎

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -61,9 +61,8 @@ class ExplicitMataParser {
6161
}
6262
}
6363

64-
public <S, I, A extends MutableNFA<S, I>> InputModelData<I, A> extract(AutomatonCreator<A, I> creator,
65-
Function<String, I> symbolParser) {
66-
Map<String, S> name2State = new HashMap<String, S>(HashUtil.capacity(this.states.size()));
64+
public <I, A extends MutableNFA<?, I>> InputModelData<I, A> extract(AutomatonCreator<A, I> creator,
65+
Function<String, I> symbolParser) {
6766
Map<String, I> label2Input = new HashMap<String, I>(HashUtil.capacity(this.labels.size()));
6867

6968
final List<I> inputs = new ArrayList<I>(this.labels.size());
@@ -75,7 +74,15 @@ class ExplicitMataParser {
7574
final Alphabet<I> alphabet = Alphabets.fromCollection(inputs);
7675

7776
final A nfa = creator.createAutomaton(alphabet, this.states.size());
77+
final MutableNFA<?, I> casted = nfa;
78+
79+
fillAutomaton(casted, label2Input);
80+
81+
return new InputModelData<>(nfa, alphabet);
82+
}
7883

84+
private <S, I> void fillAutomaton(MutableNFA<S, I> nfa, Map<String, I> label2Input) {
85+
Map<String, S> name2State = new HashMap<String, S>(HashUtil.capacity(this.states.size()));
7986
for (String s : this.states) {
8087
if (this.initials.contains(s)) {
8188
name2State.put(s, nfa.addInitialState(this.finals.contains(s)));
@@ -88,8 +95,6 @@ class ExplicitMataParser {
8895
label2Input.get(t.getSecond()),
8996
name2State.get(t.getThird()));
9097
}
91-
92-
return new InputModelData<>(nfa, alphabet);
9398
}
9499
}
95100

‎serialization/mata/src/test/java/net/automatalib/serialization/mata/MataSerializationTest.java‎

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ public void testDeserialization() throws IOException, FormatException {
8787
@Test
8888
public void testFailOnWrongFormat() throws IOException {
8989
try (InputStream is = MataSerializationTest.class.getResourceAsStream("/false-T10-lhs.mata")) {
90-
final MataNFAParser<?, String, CompactNFA<String>> reader =
90+
final MataNFAParser<String, CompactNFA<String>> reader =
9191
new MataNFAParser<>(new CompactNFA.Creator<>(), Function.identity());
9292

9393
Assert.assertThrows(FormatException.class, () -> reader.readModel(is));
@@ -112,7 +112,7 @@ public void testEquivalence() throws IOException, FormatException {
112112

113113
writer.writeModel(baos, nfa, nfa.getInputAlphabet());
114114

115-
final MataNFAParser<Integer, Integer, CompactNFA<Integer>> reader =
115+
final MataNFAParser<Integer, CompactNFA<Integer>> reader =
116116
new MataNFAParser<>(new CompactNFA.Creator<>(), Integer::parseInt);
117117

118118
final ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
@@ -141,8 +141,7 @@ public void doNotCloseOutputStreamTest() throws IOException {
141141
@Test
142142
public void doNotCloseInputStreamTest() throws IOException, FormatException {
143143
try (InputStream is = MataSerializationTest.class.getResourceAsStream("/easy_basic-01-neg-all1-0.mata")) {
144-
final MataNFAParser<?, ?, ?> reader =
145-
new MataNFAParser<>(new CompactNFA.Creator<>(), Function.identity());
144+
final MataNFAParser<?, ?> reader = new MataNFAParser<>(new CompactNFA.Creator<>(), Function.identity());
146145
// assert not throws
147146
reader.readModel(new UnclosableInputStream(is));
148147
}

0 commit comments

Comments
 (0)