summaryrefslogtreecommitdiff
path: root/scl/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'scl/src/main/java')
-rw-r--r--scl/src/main/java/bjc/dicelang/scl/tokens/SCLToken.java66
-rw-r--r--scl/src/main/java/bjc/dicelang/scl/tokens/StringLitSCLToken.java12
-rw-r--r--scl/src/main/java/bjc/dicelang/scl/tokens/StringSCLToken.java31
-rw-r--r--scl/src/main/java/bjc/dicelang/scl/tokens/SymbolSCLToken.java12
-rw-r--r--scl/src/main/java/bjc/dicelang/scl/tokens/WordListSCLToken.java31
-rw-r--r--scl/src/main/java/bjc/dicelang/scl/tokens/WordSCLToken.java114
-rw-r--r--scl/src/main/java/bjc/dicelang/scl/tokens/WordsSCLToken.java12
7 files changed, 249 insertions, 29 deletions
diff --git a/scl/src/main/java/bjc/dicelang/scl/tokens/SCLToken.java b/scl/src/main/java/bjc/dicelang/scl/tokens/SCLToken.java
index 127756b..659f545 100644
--- a/scl/src/main/java/bjc/dicelang/scl/tokens/SCLToken.java
+++ b/scl/src/main/java/bjc/dicelang/scl/tokens/SCLToken.java
@@ -17,16 +17,78 @@ import static bjc.dicelang.scl.tokens.SCLToken.Type.*;
*/
public class SCLToken {
+ /**
+ * Represent all the types of a token.
+ *
+ * @author student
+ *
+ */
public static enum Type {
/* Natural tokens. These come directly from strings */
- ILIT, FLIT, BLIT, SQUOTE, DQUOTE, OBRACKET, OBRACE, SYMBOL, WORD,
+ /**
+ * Integer literal.
+ */
+ ILIT,
+ /**
+ * Floating-point literal.
+ */
+ FLIT,
+ /**
+ * Boolean literal.
+ */
+ BLIT,
+ /**
+ * Single-quote.
+ */
+ SQUOTE,
+ /**
+ * Double-quote.
+ */
+ DQUOTE,
+ /**
+ * Open-bracket.
+ */
+ OBRACKET,
+ /**
+ * Open-brace.
+ */
+ OBRACE,
+ /**
+ * Symbol.
+ */
+ SYMBOL,
+ /**
+ * Word.
+ */
+ WORD,
/* Synthetic tokens. These are produced from special tokens. */
- SLIT, WORDS, ARRAY,
+ /**
+ * String literal.
+ */
+ SLIT,
+ /**
+ * List of words.
+ */
+ WORDS,
+ /**
+ * List of data.
+ */
+ ARRAY,
}
+ /**
+ * The type of the token.
+ */
public SCLToken.Type type;
+ /**
+ * Convert a string into a token.
+ *
+ * @param token
+ * The string to convert into a token.
+ * @return The token.
+ */
public static SCLToken tokenizeString(final String token) {
if (litTokens.containsKey(token)) {
return new SCLToken(litTokens.get(token));
diff --git a/scl/src/main/java/bjc/dicelang/scl/tokens/StringLitSCLToken.java b/scl/src/main/java/bjc/dicelang/scl/tokens/StringLitSCLToken.java
index 85c6cb0..d2a10f9 100644
--- a/scl/src/main/java/bjc/dicelang/scl/tokens/StringLitSCLToken.java
+++ b/scl/src/main/java/bjc/dicelang/scl/tokens/StringLitSCLToken.java
@@ -1,7 +1,19 @@
package bjc.dicelang.scl.tokens;
+/**
+ * Represents a literal string token.
+ *
+ * @author student
+ *
+ */
public class StringLitSCLToken extends StringSCLToken {
+ /**
+ * Create a new literal string token.
+ *
+ * @param val
+ * The string value of the token.
+ */
public StringLitSCLToken(String val) {
super(false, val);
}
diff --git a/scl/src/main/java/bjc/dicelang/scl/tokens/StringSCLToken.java b/scl/src/main/java/bjc/dicelang/scl/tokens/StringSCLToken.java
index d4ed8ec..d026bdb 100644
--- a/scl/src/main/java/bjc/dicelang/scl/tokens/StringSCLToken.java
+++ b/scl/src/main/java/bjc/dicelang/scl/tokens/StringSCLToken.java
@@ -1,11 +1,19 @@
package bjc.dicelang.scl.tokens;
-public class StringSCLToken extends SCLToken {
- /* Used for SYMBOL & SLIT */
+/**
+ * Base class for tokens containing strings.
+ *
+ * @author student
+ *
+ */
+public abstract class StringSCLToken extends SCLToken {
+ /**
+ * String value of the token.
+ */
public String stringVal;
protected StringSCLToken(boolean isSymbol, String val) {
- if(isSymbol) {
+ if (isSymbol) {
type = Type.SYMBOL;
} else {
type = Type.SLIT;
@@ -24,13 +32,18 @@ public class StringSCLToken extends SCLToken {
@Override
public boolean equals(Object obj) {
- if(this == obj) return true;
- if(!super.equals(obj)) return false;
- if(getClass() != obj.getClass()) return false;
+ if (this == obj)
+ return true;
+ if (!super.equals(obj))
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
StringSCLToken other = (StringSCLToken) obj;
- if(stringVal == null) {
- if(other.stringVal != null) return false;
- } else if(!stringVal.equals(other.stringVal)) return false;
+ if (stringVal == null) {
+ if (other.stringVal != null)
+ return false;
+ } else if (!stringVal.equals(other.stringVal))
+ return false;
return true;
}
diff --git a/scl/src/main/java/bjc/dicelang/scl/tokens/SymbolSCLToken.java b/scl/src/main/java/bjc/dicelang/scl/tokens/SymbolSCLToken.java
index c9ba43a..d67be78 100644
--- a/scl/src/main/java/bjc/dicelang/scl/tokens/SymbolSCLToken.java
+++ b/scl/src/main/java/bjc/dicelang/scl/tokens/SymbolSCLToken.java
@@ -1,7 +1,19 @@
package bjc.dicelang.scl.tokens;
+/**
+ * Represents a symbol literal.
+ *
+ * @author student
+ *
+ */
public class SymbolSCLToken extends StringSCLToken {
+ /**
+ * Create a symbol literal
+ *
+ * @param val
+ * The value of the symbol.
+ */
public SymbolSCLToken(String val) {
super(true, val);
}
diff --git a/scl/src/main/java/bjc/dicelang/scl/tokens/WordListSCLToken.java b/scl/src/main/java/bjc/dicelang/scl/tokens/WordListSCLToken.java
index 8463b66..d5bf537 100644
--- a/scl/src/main/java/bjc/dicelang/scl/tokens/WordListSCLToken.java
+++ b/scl/src/main/java/bjc/dicelang/scl/tokens/WordListSCLToken.java
@@ -2,12 +2,20 @@ package bjc.dicelang.scl.tokens;
import bjc.utils.funcdata.IList;
-public class WordListSCLToken extends SCLToken {
- /* Used for WORDS & ARRAY */
+/**
+ * Represents a list of words.
+ *
+ * @author student
+ *
+ */
+public abstract class WordListSCLToken extends SCLToken {
+ /**
+ * The list of words.
+ */
public IList<SCLToken> tokenVals;
protected WordListSCLToken(boolean isArray, IList<SCLToken> tokens) {
- if(isArray) {
+ if (isArray) {
type = Type.ARRAY;
} else {
type = Type.WORDS;
@@ -26,13 +34,18 @@ public class WordListSCLToken extends SCLToken {
@Override
public boolean equals(Object obj) {
- if(this == obj) return true;
- if(!super.equals(obj)) return false;
- if(getClass() != obj.getClass()) return false;
+ if (this == obj)
+ return true;
+ if (!super.equals(obj))
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
WordListSCLToken other = (WordListSCLToken) obj;
- if(tokenVals == null) {
- if(other.tokenVals != null) return false;
- } else if(!tokenVals.equals(other.tokenVals)) return false;
+ if (tokenVals == null) {
+ if (other.tokenVals != null)
+ return false;
+ } else if (!tokenVals.equals(other.tokenVals))
+ return false;
return true;
}
diff --git a/scl/src/main/java/bjc/dicelang/scl/tokens/WordSCLToken.java b/scl/src/main/java/bjc/dicelang/scl/tokens/WordSCLToken.java
index 5c3c8cb..ae185de 100644
--- a/scl/src/main/java/bjc/dicelang/scl/tokens/WordSCLToken.java
+++ b/scl/src/main/java/bjc/dicelang/scl/tokens/WordSCLToken.java
@@ -5,22 +5,104 @@ import static bjc.dicelang.scl.tokens.WordSCLToken.Word.*;
import java.util.HashMap;
import java.util.Map;
+/**
+ * Represents a single word.
+ *
+ * @author student
+ *
+ */
public class WordSCLToken extends SCLToken {
+ /**
+ * Represents the word type.
+ *
+ * @author student
+ *
+ */
public static enum Word {
/* Array manipulation */
- MAKEARRAY, MAKEEXEC, MAKEUNEXEC,
+ /**
+ * Create an array
+ */
+ MAKEARRAY,
+ /**
+ * Make a token executable.
+ */
+ MAKEEXEC,
+ /**
+ * Make a token unexecutable.
+ */
+ MAKEUNEXEC,
+
/* Stream manipulation */
- NEWSTREAM, LEFTSTREAM, RIGHTSTREAM, DELETESTREAM, MERGESTREAM,
+ /**
+ * Create a new stream.
+ */
+ NEWSTREAM,
+ /**
+ * Swap to the left stream.
+ */
+ LEFTSTREAM,
+ /**
+ * Swap to the right stream.
+ */
+ RIGHTSTREAM,
+ /**
+ * Delete the current stream.
+ */
+ DELETESTREAM,
+ /**
+ * Merge the streams.
+ */
+ MERGESTREAM,
+
/* Stack manipulation */
- STACKCOUNT, STACKEMPTY, DROP, NDROP, NIP, NNIP,
+ /**
+ * Get the count of items on the stack.
+ */
+ STACKCOUNT,
+ /**
+ * Check if the stack is empty.
+ */
+ STACKEMPTY,
+ /**
+ * Drop an item from the top of the stack.
+ */
+ DROP,
+ /**
+ * Drop a number of items from the top of the stack.
+ */
+ NDROP,
+ /**
+ * Drop an item, leaving the top of the stack alone.
+ */
+ NIP,
+ /**
+ * Drop a number of items, leaving the top of the stack alone.
+ */
+ NNIP,
}
+ /**
+ * The value of the word.
+ */
public Word wordVal;
+ /**
+ * Create a new word token.
+ *
+ * @param wrd
+ * The value of the word.
+ */
public WordSCLToken(String wrd) {
this(builtinWords.get(wrd));
}
+ /**
+ * Create a new word token.
+ *
+ * @param wrd
+ * The value of the word.
+ */
public WordSCLToken(Word wrd) {
super(Type.WORD);
@@ -42,14 +124,26 @@ public class WordSCLToken extends SCLToken {
@Override
public boolean equals(Object obj) {
- if(this == obj) return true;
- if(!super.equals(obj)) return false;
- if(getClass() != obj.getClass()) return false;
+ if (this == obj)
+ return true;
+ if (!super.equals(obj))
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
WordSCLToken other = (WordSCLToken) obj;
- if(wordVal != other.wordVal) return false;
+ if (wordVal != other.wordVal)
+ return false;
return true;
}
+ /**
+ * Check if a word is built-in.
+ *
+ * @param wrd
+ * The word to check.
+ *
+ * @return Whether or not the word is builtin.
+ */
public static boolean isBuiltinWord(String wrd) {
return builtinWords.containsKey(wrd);
}
@@ -61,13 +155,15 @@ public class WordSCLToken extends SCLToken {
builtinWords = new HashMap<>();
builtinWords.put("makearray", MAKEARRAY);
+ builtinWords.put("cvx", MAKEEXEC);
+ builtinWords.put("cvux", MAKEUNEXEC);
+
builtinWords.put("+stream", NEWSTREAM);
builtinWords.put(">stream", LEFTSTREAM);
builtinWords.put("<stream", RIGHTSTREAM);
builtinWords.put("-stream", DELETESTREAM);
builtinWords.put("<-stream", MERGESTREAM);
- builtinWords.put("cvx", MAKEEXEC);
- builtinWords.put("cvux", MAKEUNEXEC);
+
builtinWords.put("#", STACKCOUNT);
builtinWords.put("empty?", STACKEMPTY);
builtinWords.put("drop", DROP);
diff --git a/scl/src/main/java/bjc/dicelang/scl/tokens/WordsSCLToken.java b/scl/src/main/java/bjc/dicelang/scl/tokens/WordsSCLToken.java
index 02d720c..40c4cd4 100644
--- a/scl/src/main/java/bjc/dicelang/scl/tokens/WordsSCLToken.java
+++ b/scl/src/main/java/bjc/dicelang/scl/tokens/WordsSCLToken.java
@@ -2,8 +2,20 @@ package bjc.dicelang.scl.tokens;
import bjc.utils.funcdata.IList;
+/**
+ * A token representing an executable bunch of words.
+ *
+ * @author student
+ *
+ */
public class WordsSCLToken extends WordListSCLToken {
+ /**
+ * Create a new executable words token.
+ *
+ * @param tokens
+ * The tokens to use.
+ */
public WordsSCLToken(IList<SCLToken> tokens) {
super(false, tokens);
}