提问人:Hakeem Mayaki 提问时间:9/12/2023 更新时间:9/12/2023 访问量:36
在 Nand2Tetris 中实现 Mux 门时出现语法错误
Syntax error when implementing a Mux gate in Nand2Tetris
问:
我正在从事 Nand2Tetris 课程的第一个项目,我必须仅使用 Nand、Not、And 和 Or 门来实现 Mux 门。
我在 Mux.hdl 文件中编写了以下代码:
CHIP Mux {
IN a, b, sel;
OUT out;
PARTS:
// Put your code here:
Not(in=sel, out=not_sel);
And(a=a, b=not_sel, out=and_a);
And(a=b, b=sel, out=and_b);
Or(a=and_a, b=and_b, out=out);
}
但是,当我尝试在硬件模拟器中加载此代码时,我收到以下错误消息:In HDL file C:\Users\BG\Nand2Tetris\projects\01\Mux.hdl Line 18 '' or ')' are expected
我已经检查了我的代码是否有任何拼写错误或语法错误,但我找不到任何错误。我还确保将项目所需的所有文件都放在正确的目录中。我正在使用课程网站上最新版本的硬件模拟器。
我做错了什么?如何修复此错误?
答:
首先,在发布代码时,您应该发布整个文件,以便我们知道错误消息指的是哪一行。在您的例子中,第 18 行是代码的第一行,即 Not 门。
我不会立即给你答案,而是会引导你完成解决方案过程,因为它将来帮助你将来将其包含在你的工具包中。
你在第一行就出错了,这说明你有一个系统性问题。
错误说“,”“或”)“是预期的(不是您发布的”“或”)“,顺便说一句)。在此过程中的某个时刻,解析器遇到了它期望其中一个分隔符标记的情况。
您的“不”门似乎已正确形成;它在 () 内列出了电线,它有正确数量的电线,in= 和 out= 是正确的名称,它们用逗号分隔。
因此,像解析器一样,一次一步执行一个字符,并寻找可以使它说“嘿,我在这里期待一个或一个)的字符,但还有其他东西。
看不见?不要难过。乍一看我也错过了。我们俩都做了一个假设,这个假设对大多数编程语言都是正确的,但对NAND2Tetris HDL来说却不是这样。
想想看,这行中最不寻常的角色是什么?它是“_”。您已经从其他编程语言中训练了自己,即 _ 是名称中的有效字符。在这种情况下也是如此吗?
本书的附录 2 描述了 HDL 语法。第 285 页告诉你什么是有效名称——“任何不以数字开头的字母和数字序列(某些硬件模拟器不允许使用连字符)”。诚然,这可以更好地措辞,以明确不允许使用连字符,因为一些现实生活中的硬件模拟器不允许使用连字符。
所以这是你的问题。只需将您的线路名称更改为有效的 HDL 名称(例如:not_sel -> notSel),您的代码就会运行。
评论