gnu.kawa.lispexpr

Class LispReader

public class LispReader extends Lexer

A Lexer for reading S-expressions in generic Lisp-like syntax. This class may have outlived its usefulness: It's mostly just a wrapper around a LineBufferedReader plus a helper token-buffer. The functionality should be moved to ReadTable, though it is unclear what to do about the tokenBuffer.
Field Summary
protected booleanfinalColonIsKeyword
True if "IDENTIFIER:" should be treated as a keyword.
protected booleaninitialColonIsKeyword
True if ":IDENTIFIER" should be treated as a keyword.
protected booleanseenEscapes
If true, then tokenbuffer contains escaped characters.
static intSCM_NUMBERS
static charTOKEN_ESCAPE_CHAR
Constructor Summary
LispReader(LineBufferedReader port)
LispReader(LineBufferedReader port, SourceMessages messages)
Method Summary
ObjecthandleToken(int startPos, int endPos, ReadTable rtable)
Classify and return a token in tokenBuffer from startPos to endPos.
static ObjectlookupUnit(String name)
Resolve a unit name, if possible.
protected ObjectmakeNil()
protected ObjectmakePair(Object car, int line, int column)
ObjectmakePair(Object car, Object cdr)
static ObjectparseNumber(char[] buffer, int start, int count, char exactness, int radix, int flags)
Parse a number.
static ObjectreadCharacter(LispReader reader)
ObjectreadCommand()
Read a "command" - a top-level expression or declaration.
intreadEscape()
Reads a C-style String escape sequence.
intreadEscape(int c)
voidreadNestedComment(char c1, char c2)
Read a #|...|#-style comment (which may contain other nested comments).
static ObjectreadNumberWithRadix(int previous, LispReader reader, int radix)
Read a number from a LispReader
ObjectreadObject()
ObjectreadObject(int c)
static SimpleVectorreadSimpleVector(LispReader reader, char kind)
static ObjectreadSpecial(LispReader reader)
ObjectreadValues(int ch, ReadTable rtable)
ObjectreadValues(int ch, ReadTableEntry entry, ReadTable rtable)
May return zero or multiple values.
protected ObjectreturnSymbol(int startPos, int endPos, ReadTable rtable)
protected voidsetCdr(Object pair, Object cdr)
protected booleanvalidPostfixLookupStart(ReadTable rtable)

Field Detail

finalColonIsKeyword

protected boolean finalColonIsKeyword
True if "IDENTIFIER:" should be treated as a keyword.

initialColonIsKeyword

protected boolean initialColonIsKeyword
True if ":IDENTIFIER" should be treated as a keyword.

seenEscapes

protected boolean seenEscapes
If true, then tokenbuffer contains escaped characters. These are prefixed (in the buffer) by TOKEN_ESCAPE_CHAR.

SCM_NUMBERS

public static final int SCM_NUMBERS

TOKEN_ESCAPE_CHAR

public static final char TOKEN_ESCAPE_CHAR

Constructor Detail

LispReader

public LispReader(LineBufferedReader port)

LispReader

public LispReader(LineBufferedReader port, SourceMessages messages)

Method Detail

handleToken

public Object handleToken(int startPos, int endPos, ReadTable rtable)
Classify and return a token in tokenBuffer from startPos to endPos.

lookupUnit

public static Object lookupUnit(String name)
Resolve a unit name, if possible. Returns null if the unit name is unknown.

makeNil

protected Object makeNil()

makePair

protected Object makePair(Object car, int line, int column)

makePair

public Object makePair(Object car, Object cdr)

parseNumber

public static Object parseNumber(char[] buffer, int start, int count, char exactness, int radix, int flags)
Parse a number.

Parameters: buffer contains the characters of the number start startinging index of the number in the buffer count number of characters in buffer to use exactness either 'i' or 'I' force an inexact result, either 'e' or 'E' force an exact result, '\0' yields an inact or inexact depending on the form of the literal, while ' ' is like '\0' but does not allow more exactness specifiers. radix the number base to use or 0 if unspecified

Returns: the number if a valid number; null or a String-valued error message if if there was some error parsing the number.

readCharacter

public static Object readCharacter(LispReader reader)

readCommand

public Object readCommand()
Read a "command" - a top-level expression or declaration. Return Sequence.eofValue of end of file.

readEscape

public int readEscape()
Reads a C-style String escape sequence. Assume '\\' has already been read. Return the converted character, or -1 on EOF, or -2 to ignore.

readEscape

public final int readEscape(int c)

readNestedComment

public final void readNestedComment(char c1, char c2)
Read a #|...|#-style comment (which may contain other nested comments). Assumes the initial "#|" has already been read.

readNumberWithRadix

public static Object readNumberWithRadix(int previous, LispReader reader, int radix)
Read a number from a LispReader

Parameters: previous number of characters already pushed on tokenBuffer reader LispReader to read from radix base to use or -1 if unspecified

readObject

public Object readObject()

readObject

public final Object readObject(int c)

readSimpleVector

public static SimpleVector readSimpleVector(LispReader reader, char kind)

readSpecial

public static Object readSpecial(LispReader reader)

readValues

public Object readValues(int ch, ReadTable rtable)

readValues

public Object readValues(int ch, ReadTableEntry entry, ReadTable rtable)
May return zero or multiple values.

returnSymbol

protected Object returnSymbol(int startPos, int endPos, ReadTable rtable)

setCdr

protected void setCdr(Object pair, Object cdr)

validPostfixLookupStart

protected boolean validPostfixLookupStart(ReadTable rtable)