Начало работы с OpenCOBOL! (Привет мир!)

Я пытаюсь сделать очень простую программу на COBOL. Я настроил свой каталог, конфигурации и т. Д., Но когда я собираюсь его скомпилировать, я получаю эту ошибку:

sampleCOBOL.cbl: In paragraph 'Main-Paragraph' :
sampleCOBOL.cbl:9: Error: syntax error, unexpected "end of file"

("sampleCOBOL.cbl" - мое имя файла)

Вот что содержится в моем файле:

   Identification Division.
   Program-ID. sampleCOBOL.

   Data Division.

   Procedure Division.
   Main-Paragraph.
       Display "Hello World!"
       Stop Run.

Я знаю, что ошибка возникает в строке № 9 («Остановить работу»). Однако почему?


person Bryan Strobehn    schedule 28.01.2014    source источник
comment
Я думаю, вам не хватает точки после Display "Hello World!"   -  person Luc M    schedule 29.01.2014
comment
Вы используете пробелы или табуляции для отступа в коде? При использовании вкладок попробуйте переключиться на пробелы. Если это не сработает, попробуйте просмотреть файл в шестнадцатеричном формате и замените непечатаемые символы пробелами.   -  person NealB    schedule 29.01.2014
comment
Я думаю, что, наверное, это так или, по крайней мере, указывает в правильном направлении, @NealB. Наверное, и вкладки, и концы строк Windows. Ссылка в моем ответе содержит подробности, а также была проблемой от кого-то, кто использовал Notepad ++. Я обновился, чтобы поместить детали в тело.   -  person Bill Woodger    schedule 29.01.2014
comment
@LucM все необходимые точки / периоды / точки находятся в примере программы. Добавление новых - это просто беспорядок, хотя некоторые делают это по привычке. После стандарта 1985 года в процедурном отделе их число является обязательным, и новым учащимся не стоит с ними связываться.   -  person Bill Woodger    schedule 29.01.2014
comment
@NealB: как мне переключиться на шестнадцатеричный вид? Могу ли я это сделать в Notepad ++? Кроме того, Биллу: у меня есть Notepad ++, настроенный на замену вкладок на пробелы, размером 4 и т. Д. Однако я просто попытался использовать вместо них пробелы и все еще получаю ту же ошибку. Компилятор сообщает, что ошибка происходит в строке № 9 (я предполагаю), что является остановкой выполнения. линия.   -  person Bryan Strobehn    schedule 29.01.2014
comment
Программа, указанная в вашем вопросе, не содержит вкладок или других не отображаемых символов. Я вставлял его в стандартный блокнот, поставляемый с Windows, и сохранял, а затем запускал компиляцию. Если все еще действует, я бы добавил другое имя абзаца после STOP RUN, PERFORM that-paragraph-name и поместил туда ДИСПЛЕЙ и посмотрел, сможете ли вы переместить сообщение об ошибке.   -  person Bill Woodger    schedule 29.01.2014
comment
Я скомпилировал и запустил ваш код с помощью GNU COBOL 2, а не под Windows, и с ним все в порядке. Обратите внимание, что SPFLITE эмулирует редактор мэйнфреймов IBM, поэтому, если вы не использовали SPF / ISPF на мэйнфрейме IBM, это может показаться вам немного не интуитивно понятным. HEX ON переведет дисплей в режим HEX, а HEX OFF снова выключит. Не отображаемые символы будут отображаться в виде точек, поэтому ищите их на текстовом дисплее, затем при необходимости ВКЛЮЧИТЕ HEX.   -  person Bill Woodger    schedule 29.01.2014
comment
@BillWoodger: Я попробовал то, что вы предложили (используя обычный Блокнот), и получил ту же ошибку. Затем я попытался добавить еще один абзац - то же самое. Теперь я думаю, что это должно быть что-то с символами Windows EOL / EOF, что не нравится компилятору. НАКОНЕЦ, я сделал Notepad ++ Показать все символы (из меню «Вид»), а в строке 9 2 символа: [CR] [LF], похоже. Я удалил их, но ошибка все еще возникает.   -  person Bryan Strobehn    schedule 29.01.2014
comment
А как насчет других строк?   -  person Bill Woodger    schedule 29.01.2014
comment
Я загрузил изображение того, что вижу в Notepad ++. См. Здесь: skydrive.live.com (другое примечание: как мне вставлять изображения в эти комментарии? Это что-то, что можно сделать?)   -  person Bryan Strobehn    schedule 29.01.2014
comment
Кажется, у вас смесь линий LF-only и CR-LF. Не знаю, имеет ли это значение. Я бы вставил ваш оригинальный из вопроса в Блокнот Windows. Добавьте обязательные семь пробелов в начале каждой строки с текстом. Сохранять. Попробуй это. Также см. Обновленный ответ через пару минут.   -  person Bill Woodger    schedule 29.01.2014
comment
Просто добавлю в защиту GNU Cobol. Мы решаем проблему на SourceForge, и она связана с окончанием строки. Я отправил копию программы, сохраненной в Vim, и она скомпилировалась нормально. Мы поможем Брайану решить и другие вопросы.   -  person Brian Tiffin    schedule 31.01.2014


Ответы (4)


В SourgeForge есть поддержка GNU COBOL (ранее OpenCOBOL).

Отсюда ответ на то же сообщение об ошибке: https://sourceforge.net/p/open-cobol/discussion/109660/thread/cdfe04a5/#0996

Вы можете заставить вашу программу COBOL подчиняться традиционным фиксированным столбцам начала / конца, наш вы можете поместить это >>SOURCE FORMAT IS FREE в строку один, столбец 12 вашей программы. Затем вы можете кодировать без ссылки на номера столбцов.

При использовании номеров столбцов столбцы 1-6 не используются для кода, столбец семь предназначен для комментария, отладки или маркера новой страницы, или, в редких случаях, для продолжения литерала, который не может поместиться в предыдущей строке.

Затем код начинается либо в столбцах 8-11 (также известных как «область a»), либо в столбцах 12-71 («область b»).

Вам не нужна точка / точка в PROCEDURE DIVISION, кроме как для завершения заголовка PROCEDURE DIVISION, перед именем абзаца / SECTION и перед концом программы. В далеком прошлом вам нужно было много точек / периодов, но не нужно было много лет (хотя многие до сих пор их кодируют).

Увидев ваш комментарий к другому ответу и комментарий NealB к вашему вопросу, если вы прокрутите вниз связанное обсуждение:

Я использовал Notepad ++ для написания большого количества кода. Вы можете настроить EOL для использования UNIX вместо Windows или кодировки UTF. Это также решит проблемы EOF. Кроме того, вам необходимо убедиться, что вы установили «Использовать пробелы» при табуляции. У cobc есть проблема, когда вкладки используются из редакторов Windows.

Собирая все вместе, вы используете Windows, вкладки и версию OpenCOBOL, которая не любит вкладки в исходном коде. Чтобы заставить его работать, вам нужно сделать две вещи, и вы можете получить последнюю версию GNU COBOL, когда вам это будет удобно.

Предлагаю вам перейти сюда, http://sourceforge.net/p/open-cobol/discussion/2526793/. Присоединяйтесь, если у вас нет учетной записи SourceForge, или войдите, если у вас есть, и разместите сообщение в Help getting started. Там есть люди, использующие Windows (а я не умею), которые должны быть в состоянии помочь. Причина входа / присоединения заключается в том, что в противном случае вы будете часами ждать, пока ваш вопрос сначала будет «модерирован», и вы будете отображаться как Анонимный.

person Bill Woodger    schedule 28.01.2014
comment
Я пробовал различные решения, упомянутые там, за исключением использования нового редактора. По-прежнему не повезло! SPFLite загружается прямо сейчас, и я собираюсь повторить попытку с помощью этой программы. - person Bryan Strobehn; 29.01.2014
comment
Во-первых, спасибо за ваше терпение и помощь! Я пробовал то, что вы предложили (комментарий выше), но все равно получаю ту же ошибку. Я собираюсь спросить на странице SourceForge и посмотреть, смогу ли мне там помочь. Если разберусь, вернусь с апдейтом. - person Bryan Strobehn; 29.01.2014

Разобрался в чем дело. У меня была дополнительная строчка между «Отделом идентификации» и «Идентификатором программы».

Понятия не имею, как я это пропустил.

Боже, я чувствую себя глупо.

person Bryan Strobehn    schedule 30.01.2014
comment
На самом деле, не нужно чувствовать себя глупо. У вас может быть четыреста пустых строк, и он все равно должен компилироваться. Я думаю, что вы удалили строку, оканчивающуюся на LineFeed без CarriageReturn. Если в вашей программе не осталось таких строк, значит, у вас есть ответ. Проблема непосредственно не в самой пустой строке. - person Bill Woodger; 30.01.2014

I ИДЕНТИФИКАЦИИ должен быть в столбце 8 (7 пробелов перед).

   ---- sampleCOBOL.cob -------------------------
         * Sample COBOL program
          IDENTIFICATION DIVISION.
          PROGRAM-ID. sampleCOBOL.
          PROCEDURE DIVISION.
          DISPLAY "Hello World!".
          STOP RUN.
    ----------------------------------------
person M.Ali    schedule 28.01.2014
comment
Notepad ++ сообщает мне, что он действительно начинается с столбца 8. Внизу экрана написано Col: 8, когда мой курсор стоит ПЕРЕД I. Означает ли это, что мой курсор прошел I или что он находится в I ? - person Bryan Strobehn; 28.01.2014
comment
вам также не хватает . после Hello World! _2 _ ‹- - person M.Ali; 28.01.2014

Я столкнулся с той же проблемой недавно, когда только начал изучать COBOL. Дело в том, что каждая строка должна заканчиваться CRLF. Чтобы узнать, как вы можете добиться этого.

person Coding man    schedule 22.01.2015