lab 3/4, no report yet
This commit is contained in:
@@ -16,7 +16,6 @@ public class ChomskyChecker {
|
||||
return "Unrestricted";
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
return "Unknown";
|
||||
}
|
||||
|
||||
102
src/Lexer.java
Normal file
102
src/Lexer.java
Normal file
@@ -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<Token> tokenize(String input) {
|
||||
List<Token> 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<Token> tokens) {
|
||||
Stack<TokenType> 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<Token> tokens = tokenize(input);
|
||||
for (Token token : tokens) {
|
||||
System.out.println(token.type + " : " + token.value);
|
||||
}
|
||||
} catch (RuntimeException e) {
|
||||
System.err.println(e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
149
src/RegexGenerator.java
Normal file
149
src/RegexGenerator.java
Normal file
@@ -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("=========================");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user