0
我正在开发自上而下的回溯解析器,但在导入语法时陷入困境。我的导师希望我们采取String[]
并将其转换为char[][]
。将字符串转换为二维字符数组
例如,教师将在命令行中键入一个语法a a S b X a a S a X a S a X
,我的程序应该把它放到一个2D char arrary中。
在输入的X
的应该代表|
在语法,因此所得到的语法应该是
char[][] productions = new char[][] { {'a','a','S','b'},
{'a','a','S','a'},
{'a','S','a'},
{'\0'} };
凡\0
表示空字符串。下面的代码生成char[4][]
,但我不确定如何为每个单独的生产制作阵列。
char[][] prod; int prodCount = 0, numProds = 0;
String[] input = new String[] {"a","a","S","b","X","a","a","S","a","X",
"a","S","a","X"};
for(int i = 0; i < input.length; i++) {
if(input[i] == "X")
prodCount++;
}
prod = new char[prodCount][];
for(int i = 0; i < prod.length; i++) {
for(int k = 0; k < input.length; k++) {
if(input[k] == "X") {
prod[i] = new char[numProds];
numProds = 0; break;
} else
numProds++;
}
}
for(int i = 0; i < prod.length; i++) {
for(int j = 0; j < input.length; j++) {
if(input[j] == "X") break;
prod[i][j] = input[j].charAt(0);
}
}
编辑: 我已经摸索出如何将语法转换,但我坚持我如何能在我的二维数组涉及\0
。
char[][] prod; int prodCount = 0, numProds = 0;
String[] input = new String[] {"a","a","S","b","X",
"a","a","S","a","X",
"a","S","a","X"};
for(int i = 0; i < input.length; i++) {
if(input[i] == "X")
prodCount++;
}
prod = new char[prodCount][];
int current = 0;
for(int i = 0; i < input.length; i++) {
if(input[i] == "X") {
prod[current] = new char[numProds];
current++; numProds = 0;
} else
numProds++;
}
int currentTerminal = 0; current = 0;
for(int i = 0; i < input.length; i++) {
if(input[i] == "X") {
currentTerminal = 0;
current++;
}
else {
prod[current][currentTerminal] = input[i].charAt(0);
currentTerminal++;
}
}
我甚至没有想到'分裂()':P – Delfino 2014-11-23 23:13:00
但是,我会用将导入为语法一个'String []',所以我将无法使用'split()'。 – Delfino 2014-11-23 23:14:37