[英]Java program that acts as an assembler (for a made up language): will not quit while loop
基本上,它是一个两遍汇编程序,我正在努力将入口点实现到给定的汇编文件中。 该命令的格式如下:
Prog .ORIG
.ENT some,entry,point
some LD R0,entry
entry LD R1,point
point .FILL #42
.END some
相关的部分是.ENT行。 那就是汇编程序挂起的那条线。
第一遍处理.ENTs,但是它不适用于两个以上的参数(即,一个以上的逗号)。 但是,它确实适用于两个或更少的操作数。 特定的.ENT部分的代码如下:
String comma = ",";
String entry = "";
String[] tempEntryArray = new String[2];
int indexOfComma = read.indexOf(comma);
int startingIndex = 17;
int numOperands = 1;
while (indexOfComma != -1) {
if ((indexOfComma-startingIndex) == 0) {
return "An operand must precede the comma.";
}
if (numOperands > 4) {
return "The .ENT psuedo-op on line " + lineCounter
+ " has more than 4 operands.";
}
entry = overSubstring(read, startingIndex, indexOfComma);
if (entry.contains(" ")) {
return "The operand \"" + entry + "\" on line "
+ lineCounter + " has a space in it.";
}
if (entry.length() > 6) {
return "The operand \"" + entry + "\" on line "
+ lineCounter + " is longer than 6 characters.";
}
machineTables.externalSymbolTable.put(entry, tempEntryArray);
entry = read.substring(indexOfComma + 1);
startingIndex = indexOfComma + 1;
indexOfComma = entry.indexOf(comma);
if (indexOfComma != -1) {
indexOfComma += (startingIndex - 1);
}
numOperands++;
}
entry = overSubstring(read, startingIndex, read.length());
if (entry.contains(" ")) {
return "The operand \"" + entry + "\" on line "
+ lineCounter + " has a space in it.";
}
if (entry.length() > 6) {
return "The operand \"" + entry + "\" on line "
+ lineCounter + " is longer than 6 characters.";
}
machineTables.externalSymbolTable.put(entry, tempEntryArray);
read是一个字符串,其中包含输入文件的一行。 overSubstring是一种与子字符串类似的方法,但是如果读取空字符串,它将返回一个空格字符。
我为庞大的代码块感到抱歉,并且我知道错误消息可以做的更好,但是现在我担心每当有两个以上的操作数(一个以上的逗号)时,挂起汇编程序的特定代码。
如果有人可以帮助我解决这个问题,我将不胜感激。
谢谢。
我认为您正在无限读取相同的indexOfComma
值。 代替所有的startingIndex
和substring()
业务,只需使用String#indexOf(String, int)
而不是String#indexOf(String)
来正确跳过您已经找到的前面的索引。
始终获取indexOfComma
。 像这样:
int indexOfComma = -1;
int numOperands = 1;
while ((indexOfComma = read.indexOf(comma, indexOfComma+1)) != -1) {
// snip...
machineTables.externalSymbolTable.put(entry, tempEntryArray);
numOperands++;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.