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