Как я могу исправить эту ОСНОВНУЮ ошибку компиляции? - PullRequest
2 голосов
/ 21 июля 2010

У меня проблема с компиляцией программы, написанной мной на бейсике.Это симулятор DOS, который я делал, пытаясь понять, возможно ли написать операционную систему полностью на бейсике.Каждый раз, когда я пытаюсь скомпилировать, я получаю следующие сообщения:

!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 ]

1 голос
/ 21 июля 2010

Вы уверены, что ваша версия BASIC имеет ELSE? Не у всех есть ...

Полагаю, ты учишься программировать, верно? Могу я задать вопрос? Почему Basic?
Я думаю, что есть много более полезных и мощных (и в основном использующих современные практики программирования) языков для изучения, которые вы можете использовать в графической ОС, и их не сложнее изучать, например, как Python ( мой сын имеет твой возраст и он любит питона). Это простой язык для простых вещей, но очень мощный, если вам нужно (и сложный тоже!).

Удачи!

1 голос
/ 21 июля 2010

Первые два предупреждения вызваны тем, что ваша программа имеет две строки 26 и две строки 27.

Я бы предположил, что третье сообщение приходит от вашего бейсика, поддерживающего только IF THEN, а неIF THEN ELSE.В этом случае вы можете закодировать его с помощью IF GOTO.

1 голос
/ 21 июля 2010

Я не думаю, что в vintage basic есть ключевое слово ELSE, поэтому вы получаете ошибку unexpected 'E'.

Я предполагаю, что vintage BASIC равно unstructured BASIC, выможно обратиться к статье в википедии за примером: http://en.wikipedia.org/wiki/BASIC_programming_language

Кроме того, у вас есть несколько повторяющихся номеров строк для 26 и 27, что объясняет другие ошибки.

0 голосов
/ 21 июля 2010

Я отмечаю, что вы изменили первоначально опубликованный код, удалив дублирующиеся номера строк. Это сделает странную первую часть этого ответа, но я оставлю ее.

Компилятор сообщает вам, что вы используете одни и те же номера строк. Обратите внимание на следующий раздел кода?

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

Возможно, вам придется заменить «<>» на «! =» Или что-то еще, что ваш бейсик использует в качестве оператора, не равного оператору. Кроме того, вам придется больше перенумеровать, так как у вас уже есть строка 16.

...