【问题标题】:How do I fix this BASIC compilation error?如何修复此 BASIC 编译错误?
【发布时间】:2010-07-21 18:27:13
【问题描述】:

我在编译我用 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 作为编译器。有谁知道发生了什么? 打盹新台币

【问题讨论】:

  • Shell 不是操作系统.. 众所周知。
  • 当心...如果用户键入的内容未检查(不同于关键字 DIR、HELP、...),它将直接进入格式化磁盘选项 :) 未实现是所以否问题,但是当它起作用时可能很危险:) 如果他在继续格式上回答 anything but Y or N 也是如此。将第 27 行更改为 GOTO 16 将解决该问题。
  • @laurent-rpnet 我想我会重新编号 FORMAT 并将 HELP 放在它的位置,以便用户知道要输入什么。 @Fosco 我现在不制作操作系统。我正在通过制作一个模拟的 DOS shell 来练习它。一旦我掌握了这一点,那就是操作系统时间了。可能是 Windows 模仿,我一直想做但谁知道呢?我们将拭目以待! WindozeNT

标签: dos basic


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      祝你好运!

      【讨论】:

      • 根据我在 Basic 方面的(非常远的)经验,这个 IF...THEN 没有 ELSE,但您可以使用 : 在 THEN 子句上拥有多个语句,例如 ... THEN A=B : GOTO 13
      • BASIC 是,嗯,基本的!不过我会研究一下python。 ;)
      【解决方案4】:

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

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

      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 行。

      【讨论】:

      • 你可以使用16 GOTO 13
      • 脚本现在运行完美,但现在不再允许更多命令,而是完成 FORMAT 并尝试运行另一个模拟应用程序(如 FDISK)导致 FORMAT 永远循环,直到强制重新启动命令提示符和 Vintage BASIC。另外,有没有办法让模拟器真正格式化一些东西?我还不太了解 BASIC。此外,脚本中的短暂暂停,如等待功能、生成的屏幕清除和程序启动时的短哔声也很适合添加。 WindozeNT
      • @laurent-rpnet:你说得对,那会奏效。我将IF $I &lt;&gt; ... 放入以演示如何在需要时明确完成。
      • @WindozeNT:不确定,因为我使用的 Basic 不同(它在 Apple 上 ][...),但暂停时我认为您可以使用 Pause(x)(x 以秒为单位),哔: BEEP(x)BEEP(x,y) x 以秒为单位,y 以“Hz”(或切换)为单位,为了清除屏幕,它可能是 CLSCLEARCLR。格式化某些东西...不确定,但可能有一个关键字可以执行诸如EXECCALL! 之类的DOS 命令。当时调用汇编子程序是CALL...
      猜你喜欢
      • 1970-01-01
      • 2010-09-10
      • 2014-03-10
      • 2022-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多