Skip to content

Commit 475fdc8

Browse files
committed
Separate LexerRunner method
1 parent e8afe61 commit 475fdc8

2 files changed

Lines changed: 69 additions & 55 deletions

File tree

.idea/workspace.xml

Lines changed: 27 additions & 21 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/main/java/ko/carbonel/runner/LexerRunner.java

Lines changed: 42 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,17 @@
1313
import java.util.*;
1414

1515
public class LexerRunner {
16-
static OutputStream os;
16+
static OutputStream outputStream;
1717

1818
private LexerRunner() {
1919
}
2020

2121
public static void main(String[] args) {
2222
Config.get().parseArguments(args);
23+
String inputFileName = Config.get().getParam(Config.INPUT_FILE);
2324
String outputFileName = Config.get().getParam(Config.OUTPUT_FILE);
24-
os = outputFileName.isBlank() ? System.out : getOutputStream(outputFileName);
25-
Lexer lexer = new Lexer(new SourceFileReader(Config.get().getParam(Config.INPUT_FILE)));
25+
Lexer lexer = new Lexer(new SourceFileReader(inputFileName));
26+
outputStream = outputFileName.isBlank() ? System.out : getOutputStream(outputFileName);
2627
processTokens(lexer);
2728
}
2829

@@ -31,46 +32,53 @@ public static void main(String[] args) {
3132
* @param lexer The lexer to use
3233
*/
3334
private static void processTokens(Lexer lexer) {
34-
List<String> header = new ArrayList<>();
35-
List<List<String>> table = new ArrayList<>();
36-
String headerMessage;
35+
List<String> header = new ArrayList<>(); // Table header
36+
List<List<String>> table = new ArrayList<>(); // Table rows
3737
Language lang = Config.get().getActiveLang();
3838
try {
39-
while (lexer.isNotEOF(lexer.peek())) {
40-
Token token = lexer.get();
41-
table.add(List.of(
42-
String.valueOf(token.type()),
43-
String.valueOf(token.lexeme()),
44-
token.location().row() + " (" + token.location().column() + ")"
45-
));
46-
}
47-
// If no errors occurred, we can add the headers with the localized titles
48-
headerMessage = lang.lexerOK();
49-
header.add(lang.token());
50-
header.add(lang.lexeme());
51-
header.add(lang.lineCol());
52-
Utils.outputTable(headerMessage, header, table, LexerRunner::output);
39+
handleLexicalOK(lexer, header, table, lang);
5340
} catch (CompilerError e) {
54-
// If an error occurred, we can add the error headers with the localized titles
55-
headerMessage = lang.lexError();
56-
header.add(lang.line());
57-
header.add(lang.column());
58-
header.add(lang.description());
59-
table.clear(); // Drop lexemes
60-
table.add(List.of( // Insert Error
61-
String.valueOf(e.getStart().row()),
62-
String.valueOf(e.getStart().column()),
63-
e.getClass().getSimpleName()
41+
handleLexicalError(header, table, lang, e);
42+
}
43+
}
44+
45+
private static void handleLexicalOK(Lexer lexer, List<String> header, List<List<String>> table, Language lang) {
46+
while (lexer.isNotEOF(lexer.peek())) {
47+
Token token = lexer.get();
48+
table.add(List.of(
49+
String.valueOf(token.type()),
50+
String.valueOf(token.lexeme()),
51+
token.location().row() + " (" + token.location().column() + ")"
6452
));
65-
Utils.outputTable(headerMessage, header, table, LexerRunner::output);
66-
output("\n");
67-
output(e.getMessage());
6853
}
54+
// If no errors occurred, we can add the headers with the localized titles
55+
String title = lang.lexerOK();
56+
header.add(lang.token());
57+
header.add(lang.lexeme());
58+
header.add(lang.lineCol());
59+
Utils.outputTable(title, header, table, LexerRunner::output);
60+
}
61+
62+
private static void handleLexicalError(List<String> header, List<List<String>> table, Language lang, CompilerError e) {
63+
// If an error occurred, we can add the error headers with the localized titles
64+
String title = lang.lexError();
65+
header.add(lang.line());
66+
header.add(lang.column());
67+
header.add(lang.description());
68+
table.clear(); // Drop lexemes
69+
table.add(List.of( // Insert Error
70+
String.valueOf(e.getStart().row()),
71+
String.valueOf(e.getStart().column()),
72+
e.getClass().getSimpleName()
73+
));
74+
Utils.outputTable(title, header, table, LexerRunner::output);
75+
output("\n");
76+
output(e.getMessage());
6977
}
7078

7179
private static void output(String s) {
7280
try {
73-
os.write(s.getBytes(StandardCharsets.UTF_8));
81+
outputStream.write(s.getBytes(StandardCharsets.UTF_8));
7482
} catch (IOException e) {
7583
System.err.println("Unexpected error during output :c");
7684
e.printStackTrace();

0 commit comments

Comments
 (0)