2015-04-12 2 views
1

Я пытаюсь прокомментировать весь код в моем задании. Однако, когда я пытаюсь скомпилировать (или что-то еще, я серьезно не знаю), есть попытка скомпилировать код внутри кавычек. В соответствии с используемой мной книгой («На Smalltalk» - Winston) Smalltalk игнорирует начальную двойную кавычку, все символы между этой двойной кавычкой и следующей двойной котировкой и, наконец, она также игнорирует следующий знак двойной кавычки. Почему это не работает здесь?Код в комментариях компилируется

Я попытался поместить весь код в один набор двойных кавычек, и результаты были хуже.

Я специально использую Smalltalk/X. Я просто хочу помочь с тем, что вызывает ошибку комментирования.

Ошибки, которые я получаю, когда код компилируется являются:

===> Parser [ошибка]: необъявленная переменная: Удаляет при компиляции/оценки для UndefinedObject при чтении C: \ Users \ Обескураженный \ Desktop \ blank.st или вблизи линии 3 [относительно начала куска]

===> Parser [ошибка]: необъявленная переменная: поп при компиляции/оценки для UndefinedObject при чтении C: \ Users \ Disouraged \ Desktop \ blank.st на линии или рядом с ней 4 [относительно начала пуска]

===> "[" неожиданно. (отсутствующий «.», «:» или селектор перед этим?) при компиляции/оценке для UndefinedObject при чтении C: \ Users \ Disouraged \ Desktop \ blank.st на линии или рядом с ней 5 [относительно начала фрагмента]

===> неожиданный конец входного текста в строке при компиляции/оценки для> UndefinedObject при чтении C: \ Users \ Discouraged> \ Рабочий стол \ blank.st на или вблизи линии 1 [относительно начала отрезка ]

код:

" 
Build a stack based (RPN - Reverse Polish Notation) calculator for rational 
numbers 

Smalltalk at: #maxStackSize put: 32 

Object subclass: #Stack  
    instanceVariableNames: 'stackArray stackTop' 
    classVariableNames: '' 
    poolDictionaries: '' 
! 
Stack class comment: ' 
    Redundant stack class 
' 
! 

!Stack methodsFor: 'initialize'! 

new 
^super new. 
! 

init 
    stackArray := Array new: maxStackSize. 
    stackTop := -1. 
! ! 
" 
" 
!Stack class methodsFor: 'manipulating the stack'! 
" 
" 
Removes the top entry from the stack. 
pop 
    [self empty 
     ifTrue: [ 
     Transcript 
      cr; 
      show: 'Stack is EMPTY!'; 
      cr.] 
     ifFalse: [stackTop := stackTop - 1]. 
    ] 
! 
" 

ответ

4

Вы пытаетесь закодировать Smalltalk, используя формат файла, который предназначен для регистрации и передачи кода, а не для разработки. Поэтому неудивительно, что вы расстроены. Вместо этого вы должны загрузить среду IDE и использовать браузеры для написания кода. Среда Smalltalk - это приятная среда для кодирования, тестирования и запуска.

Есть несколько проблем с файловым архивом. Например, вы не можете вставлять комментарии («s»). Кроме того, вам не хватает конечного периода, есть некоторые несогласованные цитаты комментариев и включаются одиночные строки в строку, когда их следует экранировать как !!. ниже.

Но, прежде всего, загрузите IDE и использовать его. Вы обнаружите, что делает ваши задания класса с IDE будет намного более приятным.

" 
Build a stack based (RPN - Reverse Polish Notation) calculator for rational 
numbers 
" 

Smalltalk at: #maxStackSize put: 32. 

Object subclass: #Stack  
    instanceVariableNames: 'stackArray stackTop' 
    classVariableNames: '' 
    poolDictionaries: '' 
! 
Stack class comment: ' 
    Redundant stack class 
' 
! 

!Stack methodsFor: 'initialize'! 

new 
^super new. 
! 

init 
    stackArray := Array new: maxStackSize. 
    stackTop := -1. 
! ! 

!Stack methodsFor: 'manipulating the stack'! 

pop 
"Removes the top entry from the stack." 
    self empty 
     ifTrue: [ 
     Transcript 
      cr; 
      show: 'Stack is EMPTY!!';   
      cr.] 
     ifFalse: [stackTop := stackTop - 1]. 
! 
+0

Итак, вы не можете комментировать код, если код не компилируется правильно без комментариев? Например, в Java, если я набрал System.out.println («Я ненавижу Smalltalk»); это составлено и // System.out.println («Я ненавижу Smalltalk»); это обрабатывается как комментарий, а не скомпилировано Does Smalltalk не ведет себя таким образом? Также мы ограничены SmalltalkX [link] http://www.exept.de/en/products/smalltalk-x.html. –

+3

Вы можете определенно прокомментировать что-нибудь, даже код, который не компилируется, просто убедитесь, что вы правильно закрыли комментарий. Поэтому, если вы комментируете что-то с двойными кавычками, помните, что дополнительные кавычки закрывают комментарий, поэтому повторно откройте его с помощью пары котировок. Это в основном то же самое, что и экранирование «как». Это ничем не отличается от открытий/закрытий комментариев на любом языке. Например, '/ * Yo, */это комментарий * /' недействителен в Java. Но так как Smalltalk лучше всего разрабатывать как индивидуальные методы внутри окон браузера, никогда не нужно комментировать большие куски кода. –

+0

«так что вы НЕ МОЖЕТЕ». - пожалуйста, прочитайте мой ответ. – blabla999

0

формат fileout в основном транспорт формат, который использует unescaped bangs (!) в качестве разделителей записей. "! ! »(с пробелом между ними) - это пустая запись. Они экранируются двойным ударом« !! »- без пробела. Когда такой файл зарегистрирован, он ПЕРВЫЙ разбит на такие записи (агностик) THEN анализируется компилятором. Таким образом, при запуске комментария в одной такой записи и «завершении» его в другом, компилятор получает только пол-куски для компиляции и будет жаловаться.

В документации по ST/X имеется документация по файлу. Формат, который вы должны прочитать.

Именно поэтому для редактирования файлов в виде строк в внешнем редакторе есть плохая идея - вы должны быть очень осторожны, чтобы удваивать чеки и не нарушать эту структуру записей.

PS: Я вижу вашу проблему, потому что компилятор «stc» (который преобразует ST в C) использует этот формат файла в качестве входного. Но этот компилятор предназначен для компиляции зарегистрированного кода (из IDE) для окончательного развертывания, а не для разработки.

Смежные вопросы