diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml new file mode 100644 index 0000000..2b63946 --- /dev/null +++ b/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/ChomskyChecker.java b/src/ChomskyChecker.java index ddbd855..65c44cc 100644 --- a/src/ChomskyChecker.java +++ b/src/ChomskyChecker.java @@ -16,7 +16,6 @@ public class ChomskyChecker { return "Unrestricted"; } } - } return "Unknown"; } diff --git a/src/Lexer.java b/src/Lexer.java new file mode 100644 index 0000000..cb0f4ba --- /dev/null +++ b/src/Lexer.java @@ -0,0 +1,102 @@ +import java.util.ArrayList; +import java.util.List; +import java.util.Stack; + +public class Lexer { + public enum TokenType { + NUMBER, + OPERATOR, + LPAREN, + RPAREN, + FUNCTION, + COMMA, + EOF + } + + public static class Token { + public TokenType type; + public String value; + + public Token(TokenType type, String value) { + this.type = type; + this.value = value; + } + } + + public static List tokenize(String input) { + List tokens = new ArrayList<>(); + input = input.replaceAll("\\s", ""); + int i = 0; + while (i < input.length()) { + char ch = input.charAt(i); + if (Character.isDigit(ch)) { + StringBuilder sb = new StringBuilder(); + while (i < input.length() && (Character.isDigit(input.charAt(i)) || input.charAt(i) == '.')) { + sb.append(input.charAt(i)); + i++; + } + tokens.add(new Token(TokenType.NUMBER, sb.toString())); + } else if (Character.isLetter(ch)) { + StringBuilder sb = new StringBuilder(); + while (i < input.length() && Character.isLetter(input.charAt(i))) { + sb.append(input.charAt(i)); + i++; + } + tokens.add(new Token(TokenType.FUNCTION, sb.toString())); + } else { + switch (ch) { + case '(': + tokens.add(new Token(TokenType.LPAREN, "(")); + i++; + break; + case ')': + tokens.add(new Token(TokenType.RPAREN, ")")); + i++; + break; + case ',': + tokens.add(new Token(TokenType.COMMA, ",")); + i++; + break; + default: + tokens.add(new Token(TokenType.OPERATOR, String.valueOf(ch))); + i++; + break; + } + } + } + + tokens.add(new Token(TokenType.EOF, "")); + + if (!areParenthesesBalanced(tokens)) { + throw new RuntimeException("Parentheses are not balanced."); + } + + return tokens; + } + + private static boolean areParenthesesBalanced(List tokens) { + Stack stack = new Stack<>(); + for (Token token : tokens) { + if (token.type == TokenType.LPAREN) { + stack.push(TokenType.LPAREN); + } else if (token.type == TokenType.RPAREN) { + if (stack.isEmpty() || stack.pop() != TokenType.LPAREN) { + return false; + } + } + } + return stack.isEmpty(); + } + + public static void main(String[] args) { + String input = "(3 + 5) * sqrt(16)"; + try { + List tokens = tokenize(input); + for (Token token : tokens) { + System.out.println(token.type + " : " + token.value); + } + } catch (RuntimeException e) { + System.err.println(e.getMessage()); + } + } +} diff --git a/src/RegexGenerator.java b/src/RegexGenerator.java new file mode 100644 index 0000000..0c69991 --- /dev/null +++ b/src/RegexGenerator.java @@ -0,0 +1,149 @@ +import java.util.Random; + +public class RegexGenerator { + public static String[] generateRandomNr1(int numStrings) { + 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(sb); + + int length = random.nextInt(1,5); + for (int j = 0; j < length; j++) { + sb.append(randomChar("PQR")); + System.out.println(sb); + } + + sb.append("2"); + System.out.println(sb); + + sb.append(randomChar("34")); + System.out.println(sb); + + randomStrings[i] = sb.toString(); + System.out.println("========================="); + } + + return randomStrings; + } + + public static String[] generateRandomNr2(int numStrings) { + 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++) { + sb.append(randomChar("A")); + System.out.println(sb); + } + + sb.append("B"); + System.out.println(sb); + + sb.append(randomChar("CDE")); + System.out.println(sb); + + sb.append("F"); + System.out.println(sb); + + char chr = randomChar("GHI"); + sb.append(chr); + System.out.println(sb); + + sb.append(chr); + System.out.println(sb); + + randomStrings[i] = sb.toString(); + System.out.println("========================="); + } + + return randomStrings; + } + + public static String[] generateRandomNr3(int numStrings) { + 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(sb); + } + + sb.append("K"); + System.out.println(sb); + + length1 = random.nextInt(6); + for (int j = 0; j < length1; j++) { + sb.append(randomChar("LMN")); + System.out.println(sb); + } + + length1 = random.nextInt(2); + for (int j = 0; j < length1; j++) { + sb.append("O"); + System.out.println(sb); + } + + length1 = 3; + char chr = randomChar("PQ"); + for (int j = 0; j < length1; j++) { + sb.append(chr); + System.out.println(sb); + } + + + randomStrings[i] = sb.toString(); + System.out.println("========================="); + } + + return randomStrings; + } + + private static char randomChar(String characters) { + Random random = new Random(); + int index = random.nextInt(characters.length()); + return characters.charAt(index); + } + + public static void main(String[] args) { + String[] randomStrings1 = generateRandomNr1(5); + System.out.println("All Strings Nr1: "); + for (String str : randomStrings1) { + System.out.println(str); + } + System.out.println("========================="); + + String[] randomStrings2 = generateRandomNr2(5); + System.out.println("All Strings Nr2: "); + for (String str : randomStrings2) { + System.out.println(str); + } + System.out.println("========================="); + + String[] randomStrings3 = generateRandomNr3(5); + System.out.println("All Strings Nr3: "); + for (String str : randomStrings3) { + System.out.println(str); + } + System.out.println("========================="); + } +}