2

我在编译我用 BASIC 制作的程序时遇到问题。这是一个 DOS 模拟器,我正在尝试查看是否可以完全用 BASIC 编写操作系统。每次我尝试编译时,都会收到以下消息:

!SYNTAX ERROR IN LINE 15, COLUMN 50
 UNEXPECTED E
 EXPECTING : OR END OF LINE

我该怎么做才能解决这个问题?

10 PRINT 
11 PRINT "Starting..."
12 PRINT 
13 PRINT 
14 INPUT "Type the location of the Command Interpretter:"; I$
15 IF I$ = "C:\WINDOWS\COMMAND.COM" THEN GOTO 14 ELSE GOTO 13
16 INPUT "C:\>"; D$
17 IF D$ = "FORMAT" GOTO 25
18 IF D$ = "FDISK" GOTO 47
19 IF D$ = "HELP" GOTO 16
20 IF D$ = "DIR" GOTO 16
21 IF D$ = "MKDIR" GOTO 16
22 IF D$ = "WIN" GOTO 16
23 IF D$ = "CD" GOTO 16
24 IF D$ = "DEL" GOTO 16
25 PRINT "WARNING, ALL DATA ON REMOVABLE DISK"
27 PRINT "DRIVE A: WILL BE LOST!"
28 INPUT "Proceed with Format (Y/N)"; F$
29 IF F$ = "Y" THEN GOTO 28
30 IF F$ = "N" THEN GOTO 16
31 PRINT 
32 PRINT 
33 PRINT 
34 PRINT "Fotmatting 1.44MB"
35 PRINT "Format complete."
36 PRINT "Writing out file allocation table"
37 PRINT "Complete."
38 PRINT "Calculating free space (this may take several minutes)...................."
39 PRINT "Complete."
40 PRINT 
41 INPUT "Volume Label (11 charchters, ENTER for none)"
42 PRINT 
43 PRINT "              1,440MB total disk space"
44 PRINT "              1,440MB available on disk"
45 PRINT 
46 PRINT "                       512 bytes in each allocation unit."
47 PRINT "                  32,624 allocation units available on disk."
48 PRINT "Volume Serial Number is 326A-1312"
49 GOTO 16
50 PRINT "Incorrect DOS Version"
51 PRINT 
52 GOTO 16

我使用 Vintage BASIC 1.0.1 作为编译器。有谁知道发生了什么?打盹新台币

4

4 回答 4

1

我认为ELSEvintage basic 中没有关键字,这就是您收到unexpected 'E'错误的原因。

我假设年份BASICunstructured BASIC,你可以参考维基百科文章的例子: http ://en.wikipedia.org/wiki/BASIC_programming_language

此外,26 和 27 有一些重复的行号,这解释了其他错误。

于 2010-07-21T18:34:17.767 回答
1

你确定你的 BASIC 版本有ELSE吗?不是所有人都有...

我猜你正在学习编程,对吧?我可以问个问题吗?为什么选择基本?
我认为有很多更有用和更强大(并且主要使用现代编程实践)的语言来学习你可以在图形操作系统中使用,并且它们不像 Python 那样学习起来更复杂(我儿子有你的年龄和他喜欢蟒蛇)。它是一种用于简单事物的简单语言,但如果您需要(也很复杂!),它会非常强大。

祝你好运!

于 2010-07-21T18:34:42.113 回答
1

前两个警告是由您的程序有两行26和两行引起的27

我猜第三条消息来自您的 BASIC 仅支持IF THEN而不是IF THEN ELSE. 在这种情况下,您可以使用 对其进行编码IF GOTO

于 2010-07-21T18:35:14.520 回答
0

我注意到您已经更改了最初发布的代码,删除了重复的行号这将使这个答案的第一部分看起来很奇怪,但我会留下它。

编译器告诉您您正在重新使用相同的行号。注意到下面的代码部分了吗?

26 PRINT "DRIVE A: WILL BE LOST!"
27 INPUT "Proceed with Format (Y/N)"; F$
26 IF F$ = "Y" THEN GOTO 28
27 IF F$ = "N" THEN GOTO 16

解决方法是重新编号您的行。现在您知道了为什么在需要行号的语言中通常不在行之间使用 1 的增量!(但是,您可能会找到 - 甚至编写 - 一个工具来为您做这件事。)

关于来自以下的错误:

15 IF I$ = "C:\WINDOWS\COMMAND.COM" THEN GOTO 14 ELSE GOTO 13

我以前没有遇到过“Vintage BASIC”,但假设关于它不支持 else 的其他答案是正确的,你会想要类似的东西:

15 IF I$ = "C:\WINDOWS\COMMAND.COM" THEN GOTO 14 
16 IF I$ <> "C:\WINDOWS\COMMAND.COM" THEN GOTO 13

您可能需要将“<>”替换为“!=”或您的 BASIC 用作不等于运算符的任何内容。此外,您必须进行更多的重新编号,因为您已经有了第 16 行。

于 2010-07-21T18:35:50.057 回答