123 lines
2.4 KiB
Java
123 lines
2.4 KiB
Java
|
/*
|
||
|
* Name: Mike Cifelli
|
||
|
* Course: CIS 443 - Programming Languages
|
||
|
* Assignment: Lisp Parser
|
||
|
*/
|
||
|
|
||
|
package parser;
|
||
|
|
||
|
/**
|
||
|
* This is the base class for memory in the PL-Lisp implementation.
|
||
|
*/
|
||
|
public class SExpression {
|
||
|
|
||
|
// for mark and sweep garbage collection
|
||
|
private boolean marked = false;
|
||
|
|
||
|
/**
|
||
|
* Determine if this <code>SExpression</code> is marked.
|
||
|
*
|
||
|
* @return
|
||
|
* <code>true</code> if this <code>SExpression</code> is marked;
|
||
|
* <code>false</code> otherwise
|
||
|
*/
|
||
|
public final boolean isMarked() {
|
||
|
return marked;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Set the marked status of this S-expression to the specified value.
|
||
|
*
|
||
|
* @param value
|
||
|
* the value to assign to this S-expression's marked status
|
||
|
*/
|
||
|
public final void setMarked(final boolean value) {
|
||
|
marked = value;
|
||
|
}
|
||
|
|
||
|
// Lisp type predicates;
|
||
|
// by default, all return false (an SExpression effectively has NO type);
|
||
|
// overridden in subclasses to describe their Lisp type
|
||
|
|
||
|
/**
|
||
|
* Test if this S-expression is NULL.
|
||
|
*
|
||
|
* @return
|
||
|
* <code>false</code>
|
||
|
*/
|
||
|
public boolean nullp() {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Test if this S-expression is an ATOM.
|
||
|
*
|
||
|
* @return
|
||
|
* <code>false</code>
|
||
|
*/
|
||
|
public boolean atomp() {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Test if this S-expression is a CONS cell.
|
||
|
*
|
||
|
* @return
|
||
|
* <code>false</code>
|
||
|
*/
|
||
|
public boolean consp() {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Test if this S-expression is a LIST.
|
||
|
*
|
||
|
* @return
|
||
|
* the value of <code>(consp() || nullp())</code>
|
||
|
*/
|
||
|
public boolean listp() {
|
||
|
return (consp() || nullp());
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Test if this S-expression is a NUMBER.
|
||
|
*
|
||
|
* @return
|
||
|
* <code>false</code>
|
||
|
*/
|
||
|
public boolean numberp() {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Test if this S-expression is a SYMBOL.
|
||
|
*
|
||
|
* @return
|
||
|
* <code>false</code>
|
||
|
*/
|
||
|
public boolean symbolp() {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Test if this S-expression is a FUNCTION.
|
||
|
*
|
||
|
* @return
|
||
|
* <code>false</code>
|
||
|
*/
|
||
|
public boolean functionp() {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Test if this S-expression is a STRING.
|
||
|
*
|
||
|
* @return
|
||
|
* <code>false</code>
|
||
|
*/
|
||
|
public boolean stringp() {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
}
|