gpt4 book ai didi

充当汇编程序的 Java 程序(对于合成语言): will not quit while loop

转载 作者:行者123 更新时间:2023-12-01 15:55:11 25 4
gpt4 key购买 nike

基本上,它是一个两遍汇编程序,我正在努力实现给定汇编文件的入口点。命令格式如下:

Prog     .ORIG
.ENT some,entry,point
some LD R0,entry
entry LD R1,point
point .FILL #42
.END some

相关部分是.ENT 行。这就是汇编程序所挂起的线路。

第一遍负责处理 .ENT,但它不适用于两个以上的参数(即多个逗号)。不过,它确实适用于两个或更少的操作数。具体.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 是一种与 substring 类似的方法,但如果读取空字符串,它将返回一个空白字符。

我对巨大的代码块感到抱歉,并且我知道错误消息可以做得更好,但现在我担心每当有两个以上的操作数(多个操作数)时,这个特定的代码就会挂起汇编器逗号)。

如果有人能帮助我解决这个问题,我将非常感激。

谢谢。

最佳答案

我认为您正在无限地读取相同的 indexOfComma 值。无需使用 startingIndexsubstring() 业务,只需使用 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++;
}

关于充当汇编程序的 Java 程序(对于合成语言): will not quit while loop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5227951/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com