fixed folder structure + lab4 less hardcode, cleanup

This commit is contained in:
2024-04-28 20:24:11 +03:00
parent b6ae645808
commit c0efefa1a1
17 changed files with 86 additions and 73 deletions

51
src/Lab6/Lexer.java Normal file
View File

@@ -0,0 +1,51 @@
package Lab6;
import java.util.ArrayList;
import java.util.List;
public class Lexer {
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, ""));
return tokens;
}
}