diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
new file mode 100644
index 0000000..8a7fe54
--- /dev/null
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/FiniteAutomaton.java b/src/Lab1/FiniteAutomaton.java
similarity index 86%
rename from src/FiniteAutomaton.java
rename to src/Lab1/FiniteAutomaton.java
index cb56dda..083da14 100644
--- a/src/FiniteAutomaton.java
+++ b/src/Lab1/FiniteAutomaton.java
@@ -1,4 +1,5 @@
-import java.util.HashMap;
+package Lab1;
+
import java.util.Map;
import java.util.Set;
@@ -6,7 +7,7 @@ public class FiniteAutomaton {
private final String SS;
private final Set alphabet;
private final Map> T;
- public FiniteAutomaton(String SS, Set VN, Set VT, Map> T) {
+ public FiniteAutomaton(String SS, Set VT, Map> T) {
this.SS = SS;
this.alphabet = VT;
this.T = T;
diff --git a/src/Grammar.java b/src/Lab1/Grammar.java
similarity index 82%
rename from src/Grammar.java
rename to src/Lab1/Grammar.java
index ef34d1f..94b060c 100644
--- a/src/Grammar.java
+++ b/src/Lab1/Grammar.java
@@ -1,18 +1,14 @@
+package Lab1;
+
import java.util.*;
public class Grammar {
private final String SS;
- private final Set VN;
- private final Set VT;
- private final Map> P;
private final FiniteAutomaton FA;
- public Grammar(String SS, Set VN, Set VT, Map> P) {
+ public Grammar(String SS, Set VT, Map> P) {
this.SS = SS;
- this.VN = VN;
- this.VT = VT;
- this.P = P;
- this.FA = new FiniteAutomaton(SS, VN, VT, generateTransitions(P));
+ this.FA = new FiniteAutomaton(SS, VT, generateTransitions(P));
}
public Map> generateTransitions(Map> P) {
@@ -31,10 +27,6 @@ public class Grammar {
return transitions;
}
- public FiniteAutomaton getFA() {
- return this.FA;
- }
-
public boolean isValid(String word) {
return this.FA.isValid(word);
}
diff --git a/src/ChomskyChecker.java b/src/Lab2/ChomskyChecker.java
similarity index 98%
rename from src/ChomskyChecker.java
rename to src/Lab2/ChomskyChecker.java
index 65c44cc..e91400f 100644
--- a/src/ChomskyChecker.java
+++ b/src/Lab2/ChomskyChecker.java
@@ -1,3 +1,5 @@
+package Lab2;
+
import java.util.List;
import java.util.Map;
diff --git a/src/ManualFiniteAutomaton.java b/src/Lab2/ManualFiniteAutomaton.java
similarity index 96%
rename from src/ManualFiniteAutomaton.java
rename to src/Lab2/ManualFiniteAutomaton.java
index 8970c94..1e4f179 100644
--- a/src/ManualFiniteAutomaton.java
+++ b/src/Lab2/ManualFiniteAutomaton.java
@@ -1,3 +1,5 @@
+package Lab2;
+
import util.Pair;
import java.util.*;
@@ -5,13 +7,11 @@ public class ManualFiniteAutomaton {
private final List stateList;
private final Set alphabet;
- private final Set acceptingStates;
private final Map> T;
- public ManualFiniteAutomaton(List stateList, Set alphabet, Set acceptingStates, Map> T) {
+ public ManualFiniteAutomaton(List stateList, Set alphabet, Map> T) {
this.stateList = stateList;
this.alphabet = alphabet;
- this.acceptingStates = acceptingStates;
this.T = T;
}
@@ -86,7 +86,7 @@ public class ManualFiniteAutomaton {
}
}
- // Method to convert the NFA to Grammar
+ // Method to convert the NFA to Lab1.Grammar
public void toGrammar() {
Map mappedStates = mapStates(); // Map original states to single-character states
Map> grammar = new HashMap<>(); // Create a map to store the grammar rules
diff --git a/src/Lexer.java b/src/Lab3/Lexer.java
similarity index 98%
rename from src/Lexer.java
rename to src/Lab3/Lexer.java
index cb0f4ba..8dc8c63 100644
--- a/src/Lexer.java
+++ b/src/Lab3/Lexer.java
@@ -1,3 +1,5 @@
+package Lab3;
+
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
@@ -89,7 +91,7 @@ public class Lexer {
}
public static void main(String[] args) {
- String input = "(3 + 5) * sqrt(16)";
+ String input = "(3 + 5) * loge(16)";
try {
List tokens = tokenize(input);
for (Token token : tokens) {
diff --git a/src/RegexGenerator.java b/src/Lab4/RegexGenerator.java
similarity index 61%
rename from src/RegexGenerator.java
rename to src/Lab4/RegexGenerator.java
index ce47406..82f032d 100644
--- a/src/RegexGenerator.java
+++ b/src/Lab4/RegexGenerator.java
@@ -1,3 +1,5 @@
+package Lab4;
+
import java.util.Random;
public class RegexGenerator {
@@ -6,31 +8,22 @@ public class RegexGenerator {
String[] randomStrings = new String[numStrings];
Random random = new Random();
- System.out.println("=========================");
-
for (int i = 0; i < numStrings; i++) {
- System.out.println("String Nr. " + (i+1));
StringBuilder sb = new StringBuilder();
sb.append("O");
- System.out.println("Putting a fixed 'O'");
int length = random.nextInt(1,5);
for (int j = 0; j < length; j++) {
char randomChar = randomChar("PQR");
sb.append(randomChar);
- System.out.println("Putting a random char from \"PQR\": " + randomChar);
}
sb.append("2");
- System.out.println("Putting a fixed '2'");
-
char randomDigit = randomChar("34");
sb.append(randomDigit);
- System.out.println("Putting a random digit from \"34\": " + randomDigit);
randomStrings[i] = sb.toString();
- System.out.println("=========================");
}
return randomStrings;
@@ -40,38 +33,27 @@ public class RegexGenerator {
String[] randomStrings = new String[numStrings];
Random random = new Random();
- System.out.println("=========================");
-
for (int i = 0; i < numStrings; i++) {
- System.out.println("String Nr. " + (i+1));
StringBuilder sb = new StringBuilder();
int length1 = random.nextInt(6);
for (int j = 0; j < length1; j++) {
char randomChar = randomChar("A");
sb.append(randomChar);
- System.out.println("Putting a random char from \"A\": " + randomChar);
}
sb.append("B");
- System.out.println("Putting a fixed 'B'");
char randomChar = randomChar("CDE");
sb.append(randomChar);
- System.out.println("Putting a random char from \"CDE\": " + randomChar);
sb.append("F");
- System.out.println("Putting a fixed 'F'");
char chr = randomChar("GHI");
sb.append(chr);
- System.out.println("Putting a random char from \"GHI\": " + chr);
-
sb.append(chr);
- System.out.println("Repeating the previous random char: " + chr);
randomStrings[i] = sb.toString();
- System.out.println("=========================");
}
return randomStrings;
@@ -81,43 +63,28 @@ public class RegexGenerator {
String[] randomStrings = new String[numStrings];
Random random = new Random();
- System.out.println("=========================");
-
for (int i = 0; i < numStrings; i++) {
- System.out.println("String Nr. " + (i+1));
StringBuilder sb = new StringBuilder();
int length1 = random.nextInt(1,6);
- for (int j = 0; j < length1; j++) {
- sb.append("J");
- System.out.println("Putting a fixed 'J'");
- }
+ sb.append("J".repeat(Math.max(0, length1)));
sb.append("K");
- System.out.println("Putting a fixed 'K'");
length1 = random.nextInt(6);
for (int j = 0; j < length1; j++) {
char randomChar = randomChar("LMN");
sb.append(randomChar);
- System.out.println("Putting a random char from \"LMN\": " + randomChar);
}
length1 = random.nextInt(2);
- for (int j = 0; j < length1; j++) {
- sb.append("O");
- System.out.println("Putting a fixed 'O'");
- }
+ sb.append("O".repeat(length1));
length1 = 3;
char chr = randomChar("PQ");
- for (int j = 0; j < length1; j++) {
- sb.append(chr);
- System.out.println("Putting a random char from \"PQ\": " + chr);
- }
+ sb.append(String.valueOf(chr).repeat(length1));
randomStrings[i] = sb.toString();
- System.out.println("=========================");
}
return randomStrings;
@@ -133,22 +100,62 @@ public class RegexGenerator {
String[] randomStrings1 = generateRandomNr1(5);
System.out.println("All Strings Nr1: ");
for (String str : randomStrings1) {
- System.out.println(str);
+ explainRandomNr1(str);
}
System.out.println("=========================");
String[] randomStrings2 = generateRandomNr2(5);
System.out.println("All Strings Nr2: ");
for (String str : randomStrings2) {
- System.out.println(str);
+ explainRandomNr2(str);
}
System.out.println("=========================");
String[] randomStrings3 = generateRandomNr3(5);
System.out.println("All Strings Nr3: ");
for (String str : randomStrings3) {
- System.out.println(str);
+ explainRandomNr3(str);
}
System.out.println("=========================");
}
+
+ public static void explainRandomNr1(String s) {
+ System.out.println("Input: " + s);
+ System.out.println("O -> O");
+ int mid = s.indexOf('2');
+ System.out.println("(P|Q|R)+ -> " + s.substring(1, mid));
+ System.out.println("2 -> 2");
+ System.out.println("(3|4) -> " + s.charAt(s.length() - 1));
+ }
+
+ public static void explainRandomNr2(String s) {
+ System.out.println("Input: " + s);
+ int idx = 0;
+ while (s.charAt(idx) == 'A') {
+ idx++;
+ }
+ System.out.println("A* -> " + (idx > 0 ? s.substring(0, idx) : "'' (no A's)"));
+ System.out.println("B -> B");
+ char cde = s.charAt(idx + 1);
+ System.out.println("(C|D|E) -> " + cde);
+ System.out.println("F -> F");
+ System.out.println("(G|H|I)^2 -> " + s.substring(idx + 3));
+ }
+
+ public static void explainRandomNr3(String s) {
+ System.out.println("Input: " + s);
+ int idx = s.indexOf('K');
+ System.out.println("J+ -> " + s.substring(0, idx));
+ System.out.println("K -> K");
+ int nextPart = idx + 1;
+ while (nextPart < s.length() && "LMN".contains(s.charAt(nextPart) + "")) {
+ nextPart++;
+ }
+ System.out.println("(L|M|N)* -> " + (nextPart > idx + 1 ? s.substring(idx + 1, nextPart) : "'' (no L, M, N)"));
+ if (nextPart < s.length() && s.charAt(nextPart) == 'O') {
+ System.out.println("O? -> O");
+ nextPart++;
+ }
+ System.out.println("(P|Q)^3 -> " + s.substring(nextPart));
+ }
}
diff --git a/src/ast_parser/BinaryOperatorExpr.java b/src/Lab6/BinaryOperatorExpr.java
similarity index 97%
rename from src/ast_parser/BinaryOperatorExpr.java
rename to src/Lab6/BinaryOperatorExpr.java
index ce75ae8..023eaa4 100644
--- a/src/ast_parser/BinaryOperatorExpr.java
+++ b/src/Lab6/BinaryOperatorExpr.java
@@ -1,4 +1,4 @@
-package ast_parser;
+package Lab6;
class BinaryOperatorExpr extends Expr {
Expr left;
diff --git a/src/ast_parser/Expr.java b/src/Lab6/Expr.java
similarity index 74%
rename from src/ast_parser/Expr.java
rename to src/Lab6/Expr.java
index d69a6ba..1e00455 100644
--- a/src/ast_parser/Expr.java
+++ b/src/Lab6/Expr.java
@@ -1,4 +1,4 @@
-package ast_parser;
+package Lab6;
abstract class Expr {
abstract double evaluate();
diff --git a/src/ast_parser/FunctionExpr.java b/src/Lab6/FunctionExpr.java
similarity index 98%
rename from src/ast_parser/FunctionExpr.java
rename to src/Lab6/FunctionExpr.java
index f221a34..d472bf1 100644
--- a/src/ast_parser/FunctionExpr.java
+++ b/src/Lab6/FunctionExpr.java
@@ -1,4 +1,4 @@
-package ast_parser;
+package Lab6;
import java.util.List;
diff --git a/src/ast_parser/Lexer.java b/src/Lab6/Lexer.java
similarity index 98%
rename from src/ast_parser/Lexer.java
rename to src/Lab6/Lexer.java
index 84519ab..304934b 100644
--- a/src/ast_parser/Lexer.java
+++ b/src/Lab6/Lexer.java
@@ -1,4 +1,4 @@
-package ast_parser;
+package Lab6;
import java.util.ArrayList;
import java.util.List;
diff --git a/src/ast_parser/MainParser.java b/src/Lab6/MainParser.java
similarity index 96%
rename from src/ast_parser/MainParser.java
rename to src/Lab6/MainParser.java
index 2ea4f28..001f488 100644
--- a/src/ast_parser/MainParser.java
+++ b/src/Lab6/MainParser.java
@@ -1,4 +1,4 @@
-package ast_parser;
+package Lab6;
import java.util.List;
diff --git a/src/ast_parser/NumberExpr.java b/src/Lab6/NumberExpr.java
similarity index 90%
rename from src/ast_parser/NumberExpr.java
rename to src/Lab6/NumberExpr.java
index 28bb7fa..7372246 100644
--- a/src/ast_parser/NumberExpr.java
+++ b/src/Lab6/NumberExpr.java
@@ -1,4 +1,4 @@
-package ast_parser;
+package Lab6;
class NumberExpr extends Expr {
double value;
diff --git a/src/ast_parser/Parser.java b/src/Lab6/Parser.java
similarity index 99%
rename from src/ast_parser/Parser.java
rename to src/Lab6/Parser.java
index 6831f5f..f58b07a 100644
--- a/src/ast_parser/Parser.java
+++ b/src/Lab6/Parser.java
@@ -1,4 +1,4 @@
-package ast_parser;
+package Lab6;
import java.util.ArrayList;
import java.util.List;
diff --git a/src/ast_parser/Token.java b/src/Lab6/Token.java
similarity index 93%
rename from src/ast_parser/Token.java
rename to src/Lab6/Token.java
index 89faaad..d8452d7 100644
--- a/src/ast_parser/Token.java
+++ b/src/Lab6/Token.java
@@ -1,4 +1,4 @@
-package ast_parser;
+package Lab6;
public class Token {
public TokenType type;
diff --git a/src/ast_parser/TokenType.java b/src/Lab6/TokenType.java
similarity index 84%
rename from src/ast_parser/TokenType.java
rename to src/Lab6/TokenType.java
index fdb715b..7c66a82 100644
--- a/src/ast_parser/TokenType.java
+++ b/src/Lab6/TokenType.java
@@ -1,4 +1,4 @@
-package ast_parser;
+package Lab6;
public enum TokenType {
NUMBER,
diff --git a/src/Main.java b/src/Main.java
index 7204ef7..a5c8786 100644
--- a/src/Main.java
+++ b/src/Main.java
@@ -1,3 +1,6 @@
+import Lab1.Grammar;
+import Lab2.ChomskyChecker;
+import Lab2.ManualFiniteAutomaton;
import util.Pair;
import java.util.Arrays;
@@ -9,7 +12,7 @@ public class Main {
// LAB 1
public static final String SS = "S";
- public static final Set VN = Set.of("S", "B", "C");
+ //public static final Set VN = Set.of("S", "B", "C");
public static final Set VT = Set.of("a", "b", "c");
public static final Map> P = Map.of(
"S", List.of("aB"),
@@ -19,7 +22,7 @@ public class Main {
// LAB 2
public static final List stateList = Arrays.asList("q0", "q1", "q2");
public static final Set alphabet = Set.of("a", "b");
- public static final Set acceptingStates = Set.of("q2");
+ //public static final Set acceptingStates = Set.of("q2");
public static final Map> transitions= Map.of(
"q0", List.of(new Pair("a", "q0"), new Pair("a", "q1")),
"q1", List.of(new Pair("b", "q2"), new Pair("a", "q0")),
@@ -29,14 +32,14 @@ public class Main {
public static void main(String[] args) {
String toCheck = "aac";
- Grammar grammar = new Grammar(SS, VN, VT, P);
+ Grammar grammar = new Grammar(SS, VT, P);
grammar.generateWords(5);
System.out.println("===================================");
System.out.println("Is " + toCheck + " valid? " + grammar.isValid(toCheck));
System.out.println("===================================");
System.out.println(ChomskyChecker.classifyGrammar(P));
- ManualFiniteAutomaton MFA = new ManualFiniteAutomaton(stateList, alphabet, acceptingStates, transitions);
+ ManualFiniteAutomaton MFA = new ManualFiniteAutomaton(stateList, alphabet, transitions);
System.out.println("===================================");
MFA.toGrammar();
System.out.println("===================================");