Я работаю с файловым устройством и писателем, используя текстовые файлы. В основном реализация dfa грамматического паскаля, который обрабатывает комментарии в программе. Для этого я использовал 3 текстовых файла 1 файл для чтения данных, 1 для записи токена в нем и 1 для записи маркера ошибки в нем. Компилятор pascal не считает это {{в качестве комментария, потому что синтаксис комментария является «{это комментарий}». Для этого я использовал массив [5] [4], и я использовал считыватель файлов для чтения из текстового имени файла «code.txt», содержащего этот текст «{a}». Но проблема в том, что когда я пишу это в новое текстовое имя файла «token.txt» (сначала записывая его в token.txt, но он должен быть в файле error.tx), он печатает это {{a} означает, что он печатает первый символ два раза подобный {{. Я хочу вывести то же самое, что и в файле code.txt. Заранее спасибо.ошибка в программе java
public class Lex {
public static char dfa1[][] = new char[5][4];
/*
* for(int i=0; i<5; i++) { for(int j=0; j<4; j++) {
* System.out.println("arr["+i+"]["+j+"]"+dfa1[i][j]); } }
*/
//FileReader fr = new FileReader(filename);
//BufferedReader br = new BufferedReader(fr);
File file = new File("code.txt");
BufferedReader reader = null;
int StartState = 1;
char CurrentState = '1';
int acp =0;
String temptok = new String();
try {
reader = new BufferedReader(new FileReader(file));
int i;
// repeat until EOF
while ((i = reader.read()) != -1) {
char c = (char) i;
if (c == '{') {
if (CurrentState == dfa1[1][0]) {
CurrentState = '2';
acp =0;
temptok = temptok.concat(String.valueOf(c));
} else if (CurrentState == dfa1[2][0]) {
temptok = temptok.concat(String.valueOf(c));
acp =0;
CurrentState = '4';
} else if (CurrentState == dfa1[3][0]) {
temptok = temptok.concat(String.valueOf(c));
CurrentState = '4';
acp =0;
} else if (CurrentState == dfa1[4][0]) {
temptok = temptok.concat(String.valueOf(c));
acp =0;
break;
}
}
if (c == '}') {
if (CurrentState == dfa1[1][0]) {
acp =0;
temptok = temptok.concat(String.valueOf(c));
break;
} else if (CurrentState == dfa1[2][0]) {
temptok = temptok.concat(String.valueOf(c));
CurrentState = '3';
acp = 1;
} else if (CurrentState == dfa1[3][0]) {
temptok = temptok.concat(String.valueOf(c));
CurrentState = '3';
acp = 1;
} else if (CurrentState == dfa1[4][0]) {
temptok = temptok.concat(String.valueOf(c));
acp = 0;
break;
}
}
if (c != '}') {
if (CurrentState == dfa1[1][0]) {
temptok = temptok.concat(String.valueOf(c));
acp =0;
break;
} else if (CurrentState == dfa1[2][0]) {
temptok = temptok.concat(String.valueOf(c));
CurrentState = '2';
acp =0;
} else if (CurrentState == dfa1[3][0]) {
temptok = temptok.concat(String.valueOf(c));
acp =0;
break;
} else if (CurrentState == dfa1[4][0]) {
temptok = temptok.concat(String.valueOf(c));
acp =0;
break;
}
}
//System.out.println(temptok);
PrintWriter writer = new PrintWriter("token.txt", "UTF-8");
PrintWriter ewriter = new PrintWriter("error.txt", "UTF-8");
if(acp == 1){
writer.println(temptok);
writer.close();
}
else if(acp == 0)
{
ewriter.println(temptok);
ewriter.close();
}
Я просто разместил то же самое, что и вы :) – fmodos
@JB Nizet Большое спасибо, ваш ответ был действительно полезен для меня. –