正在编译的注释中的代码

时间:2015-04-12 19:12:58

标签: compiler-errors comments smalltalk

我试图在我的作业中注释掉所有代码。但是,当我尝试编译(或者正在发生的任何事情;我真的不知道)时,尝试在引号内编译代码。根据我正在使用的书(“On to Smalltalk” - Winston),Smalltalk忽略了最初的双引号,这个双引号和下一个双引号之间的所有字符,最后它也忽略了下一个双引号。为什么这不起作用?

我已经尝试将整个代码放入一组双引号中,结果更糟糕。

我特意使用Smalltalk / X.我只是希望得到任何导致评论错误的帮助。

代码编译时出现的错误是:

  

===>解析器[错误]:未声明的变量:删除         在编译/评估UndefinedObject时         在阅读C:\ Users \ Discouraged \ Desktop \ blank.st时         在第3行或附近[相对于块开始]

     

===>解析器[错误]:未声明的变量:pop         在编译/评估UndefinedObject时         在阅读C:\ Users \ Discouraged \ Desktop \ blank.st时         在第4行或附近[相对于块开始]

     

===> “[”出乎意料。 (在它之前缺少“。”,“:”或选择器?)         在编译/评估UndefinedObject时         在阅读C:\ Users \ Discouraged \ Desktop \ blank.st时         在第5行或附近[相对于块开始]

     

===> String中意外的输入结束        在编译/评估> UndefinedObject时        在阅读C:\ Users \ Disouraged> \ Desktop \ 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]. 
    ]
 !
"

2 个答案:

答案 0 :(得分:4)

您正在尝试使用fileout格式对Smalltalk进行编码,该格式用于记录和传输代码,而不是用于开发。所以难怪你很沮丧。您应该加载IDE并使用浏览器编写代码。 Smalltalk IDE是编码,测试和运行的宜人环境。

您的档案存在一些问题。例如,你不能嵌套注释(“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]. 
!

答案 1 :(得分:0)

fileout格式基本上是一种传输格式,它使用未转义的刘海(!)作为记录分隔符。 “!” (中间有空格)是一个空记录。他们被双击“!!”逃脱- 没有空间。当这样的文件被归档时,它首先被分成这样的记录(语言不可知),然后由编译器分析。 因此,当在一个这样的记录中开始注释并在另一个记录中“结束”时,编译器只能获得半块编译并且会抱怨。

在ST / X文档中实际上有一些关于fileOut格式的文档,您应该阅读这些文档。

这就是为什么在外部编辑器中编辑chink-filout文件是一个坏主意的原因 - 你必须非常小心双重刘海并且不要破坏这个记录结构。

PS:我看到你的麻烦了,因为“stc”编译器(将ST转换为C)使用这种fileout格式作为输入。但是这个编译器用于编译归档代码(来自IDE)以进行最终部署,而不是用于开发。