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;
+ }
}