From 3670808b8d8056ac285f91ad5436b3a8497e9d44 Mon Sep 17 00:00:00 2001 From: student Date: Wed, 7 Mar 2018 16:34:31 -0500 Subject: Update --- .../java/bjc/dicelang/scl/tokens/SCLToken.java | 66 +++++++++++- .../bjc/dicelang/scl/tokens/StringLitSCLToken.java | 12 +++ .../bjc/dicelang/scl/tokens/StringSCLToken.java | 31 ++++-- .../bjc/dicelang/scl/tokens/SymbolSCLToken.java | 12 +++ .../bjc/dicelang/scl/tokens/WordListSCLToken.java | 31 ++++-- .../java/bjc/dicelang/scl/tokens/WordSCLToken.java | 114 +++++++++++++++++++-- .../bjc/dicelang/scl/tokens/WordsSCLToken.java | 12 +++ 7 files changed, 249 insertions(+), 29 deletions(-) (limited to 'scl/src/main/java') 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 tokenVals; protected WordListSCLToken(boolean isArray, IList 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(" tokens) { super(false, tokens); } -- cgit v1.2.3