A Lexer to reading S-expressions in generic Lisp-like syntax.
SCM_NUMBERS
public static final int SCM_NUMBERS
TOKEN_ESCAPE_CHAR
public static final char TOKEN_ESCAPE_CHAR
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.
getReadCase
public char getReadCase()
Get specification of how symbols should be case-folded.
- Either 'P' (means preserve case), 'U' (upcase),
'D' (downcase, or 'I' (invert case).
handleToken
public Object handleToken(int startPos,
int endPos)
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
public Object makePair(Object car,
Object cdr)
makePair
protected Object makePair(Object car,
int line,
int column)
makeSymbol
protected Object makeSymbol(String name)
parseNumber
public static Object parseNumber(char[] buffer,
int start,
int count,
char exactness,
int radix,
int flags)
Parse a number.
buffer
- contains the characters of the numberstart
- startinging index of the number in the buffercount
- number of characters in buffer to useexactness
- 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
- the number if a valid number; null or a String-valued error
message if if there was some error parsing the number.
readCommand
public Object readCommand()
throws java.io.IOException,
SyntaxException
Read a "command" - a top-level expression or declaration.
Return Sequence.eofValue of end of file.
readEscape
public int readEscape()
throws java.io.IOException,
SyntaxException
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)
throws java.io.IOException,
SyntaxException
readNestedComment
public final void readNestedComment(char c1,
char c2)
throws java.io.IOException
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)
throws java.io.IOException,
SyntaxException
Read a number from a LispReader
previous
- number of characters already pushed on tokenBufferreader
- LispReader to read fromradix
- base to use or -1 if unspecified
readObject
public Object readObject()
throws java.io.IOException,
SyntaxException
readObject
public final Object readObject(int c)
throws java.io.IOException,
SyntaxException
readToken
public void readToken(int ch,
boolean inEscapes,
char readCase)
throws java.io.IOException,
SyntaxException
readValues
public Object readValues(int ch)
throws java.io.IOException,
SyntaxException
returnSymbol
protected Object returnSymbol(int startPos,
int endPos)
setCdr
protected void setCdr(Object pair,
Object cdr)