如何修复此BASIC编译错误?

时间:2010-07-21 18:27:13

标签: dos basic

编译我在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作为编译器。有谁知道发生了什么? Windoze NT

4 个答案:

答案 0 :(得分:1)

我认为复古基础中没有ELSE个关键字,这就是您收到unexpected 'E'错误的原因。

我认为复古BASICunstructured BASIC,您可以参考维基百科文章中的示例: http://en.wikipedia.org/wiki/BASIC_programming_language

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

答案 1 :(得分:1)

您确定您的BASIC版本有ELSE吗?并非所有人都有......

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

祝你好运!

答案 2 :(得分:1)

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

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

答案 3 :(得分: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”,但假设其他答案没有支持其他正确,你会想要这样的东西:

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

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