目前,我正在使用Rust编写的VM。我遇到了两个语法错误,我都在努力解决这两个语法错误,因为它们对我来说似乎不太有意义。
这里是代码:
pub fn aaa(vm: &mut VM, pipeline: &Pipeline, _hv: &mut dyn Hypervisor) -> Result<(), VMError>{
let mut al = vm.get_reg(Reg8::AL as u8, ValueSize::Byte)?.u8_exact()?;
let ah = vm.get_reg(Reg8::AH as u8, ValueSize::Byte)?.u8_exact()?;
let adjust = vm.flags.adjust;
if (al & 0x0F) > 9 | | adjust {
vm.set_reg(Reg8::AL as u8, SizedValue::Byte(al1.overflowing_add(6)));
vm.set_reg(Reg8::AH as u8, SizedValue::Byte(ah.overflowing_add(1)));
vm.flags.adjust = true;
vm.flags.carry = true;
} else {
vm.flags.adjust = false;
vm.flags.carry = false;
}
al = vm.get_reg(Reg8::AL as u8, ValueSize::Byte)?.u8_exact()?;
vm.set_reg(Reg8::AL as u8, SizedValue::Byte(al2 & 0x0F));
Ok(())
}
我得到的错误在这里:
error: expected `,`
--> src/ops.rs:738:9
|
738 | vm.set_reg(Reg8::AL as u8, SizedValue::Byte(al1.overflowing_add(6)));
| ^^
--> src/ops.rs:738:9
|
738 | vm.set_reg(Reg8::AL as u8, SizedValue::Byte(al1.overflowing_add(6)));
| ^^
error: expected one of `,` or `:`, found `else`
--> src/ops.rs:742:7
|
742 | } else {
| ^^^^ expected one of `,` or `:` here
我只是试图访问struct字段实现的函数,我不确定为什么编译器会告诉我使用逗号而不是句点。此外,我不知道为什么要用逗号或冒号代替我的else语句。如果不是,则看起来是完全对齐的。还有其他人遇到吗?这是编译器错误吗?
您的问题是在if条件下的| |
。该解析不是解析为逻辑或(||
),而是解析为两个单独的按位或运算符(|
)。只需将其更改为||
之间就没有空格。
一个最小的例子:
fn main() {
let adjust = true;
let al = 0xFF;
/* does not parse:
if (al & 0x0F) > 9 | | adjust {
}
*/
if (al & 0x0F) > 9 || adjust {
}
}