diff --git a/README.md b/README.md index d6336e1..a3a4015 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ ## 构建方式 -1. ant -2. java -jar out/CJCompiler.jar -3. java lexer +``` +ant run +``` diff --git a/build.xml b/build.xml index 8f0eb15..71d27a0 100644 --- a/build.xml +++ b/build.xml @@ -12,7 +12,7 @@ - + @@ -23,6 +23,17 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/src/com/compiler/lexer/LexerTester.java b/src/com/compiler/lexer/LexerTester.java index 6a927af..5f6ea4f 100644 --- a/src/com/compiler/lexer/LexerTester.java +++ b/src/com/compiler/lexer/LexerTester.java @@ -2,22 +2,22 @@ package com.compiler.lexer; import com.compiler.utils.CharSet; +import java.io.File; import java.io.IOException; -import java.nio.charset.StandardCharsets; -import java.nio.file.Files; -import java.nio.file.Paths; +import java.io.InputStream; +import java.net.URISyntaxException; +import java.net.URL; import java.util.ArrayList; import java.util.List; +import static com.compiler.utils.FileReader.getLines; + // 检测文法 public class LexerTester { public LexerTester() { - try { - List lines = Files.readAllLines(Paths.get("res/lexer.c"), StandardCharsets.US_ASCII); - generateTokenList(lines); - } catch (IOException e) { - e.printStackTrace(); - } + InputStream lexerStream = ClassLoader.getSystemResourceAsStream("lexer.c"); + List lines = getLines(lexerStream); + generateTokenList(lines); } private void generateTokenList(List lines) { diff --git a/src/com/compiler/parser/ParserTest.java b/src/com/compiler/parser/ParserTest.java index 2397c7e..c0d927b 100644 --- a/src/com/compiler/parser/ParserTest.java +++ b/src/com/compiler/parser/ParserTest.java @@ -5,8 +5,18 @@ import com.compiler.utils.Pair; import com.compiler.utils.Show; import com.compiler.utils.StringSet; +import java.io.File; +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.URL; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Paths; import java.util.*; +import static com.compiler.utils.FileReader.getLines; + public class ParserTest extends LLParser { public ParserTest() { @@ -81,9 +91,9 @@ public class ParserTest extends LLParser { } private void initRules() { - List lines = FileReader.getLines("res/SimpleGrammar.txt"); + List lines = getLines(ClassLoader.getSystemResourceAsStream("SimpleGrammar.txt")); rules = ParserGenerator.Read(lines); -// Show.printRules(rules); + // Show.printRules(rules); } diff --git a/src/com/compiler/utils/FileReader.java b/src/com/compiler/utils/FileReader.java index f766ccd..9aff316 100644 --- a/src/com/compiler/utils/FileReader.java +++ b/src/com/compiler/utils/FileReader.java @@ -1,13 +1,15 @@ package com.compiler.utils; -import java.io.IOException; +import java.io.*; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Paths; +import java.util.ArrayList; import java.util.List; +import java.util.Scanner; public class FileReader { - public static List getLines(String file){ + public static List getLines(String file) { try { return Files.readAllLines(Paths.get(file), StandardCharsets.US_ASCII); @@ -17,4 +19,30 @@ public class FileReader { } } + + public static List getLines(File file) { + List result = new ArrayList(); + try { + Scanner scanner = new Scanner(file); + while (scanner.hasNextLine()) { + result.add(scanner.nextLine()); + } + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + return result; + } + + public static List getLines(InputStream in) { + BufferedReader reader = new BufferedReader(new InputStreamReader(in)); + List result = new ArrayList<>(); + try { + while (reader.ready()) { + result.add(reader.readLine()); + } + } catch (IOException e) { + e.printStackTrace(); + } + return result; + } }