Class Parser
back
readTerm   | node |
	token isNil
		ifTrue: [ self error: 'unexpected end of input' ].
	tokenType = $(
		ifTrue: [ self nextLex. node <- self readExpression.
			tokenType = $)
				ifFalse: [ self error: 'unbalanced parenthesis' ].
			self nextLex. ^ node ].
	tokenType = $[ ifTrue: [ ^ self readBlock ].
	tokenType = $< ifTrue: [ ^ self readPrimitive ].
	(tokenType = $# and: [self currentChar = $(]) ifTrue: [ ^ self readArray ].
	(tokenType = $# and: [self currentChar ~= $(]) 
		ifTrue: [ ^ LiteralNode new value: self readSymbol ].
	self tokenIsName 
		ifTrue: [ node <- self nameNode: token.
			self nextLex. ^ node ].
	^ LiteralNode new value: self readLiteral