diff options
| author | bjculkin <bjculkin@WIT-136XG42.wvu-ad.wvu.edu> | 2017-03-01 10:13:41 -0500 |
|---|---|---|
| committer | bjculkin <bjculkin@WIT-136XG42.wvu-ad.wvu.edu> | 2017-03-01 10:13:41 -0500 |
| commit | 36e0911c6ec27707a74f0b90b1052a16374243ea (patch) | |
| tree | 08ca7723b0c0a6a7f3ce1830c59e5211e46168b8 /dice-lang/src/bjc/dicelang/Errors.java | |
| parent | 6ed83507953322c35a456d64d89f8f4f9cb0a6a1 (diff) | |
Package reorganization
Diffstat (limited to 'dice-lang/src/bjc/dicelang/Errors.java')
| -rw-r--r-- | dice-lang/src/bjc/dicelang/Errors.java | 245 |
1 files changed, 245 insertions, 0 deletions
diff --git a/dice-lang/src/bjc/dicelang/Errors.java b/dice-lang/src/bjc/dicelang/Errors.java new file mode 100644 index 0000000..e6a825c --- /dev/null +++ b/dice-lang/src/bjc/dicelang/Errors.java @@ -0,0 +1,245 @@ +package bjc.dicelang; + +public class Errors { + public static enum ErrorKey { + // Define Errors + // Incorrect define guard syntax + EK_DFN_PREDSYN, + // Incorrect define search syntax + EK_DFN_SRCSYN, + // Recursive define recursed too many times + EK_DFN_RECUR, + + // Console Errors + // Unknown console pragma + EK_CONS_INVPRAG, + // Improperly formatted define + EK_CONS_INVDEFINE, + + // Language Engine Errors + // Found closing doublebrace w/out opening doublebrace + EK_ENG_NOOPENING, + // Reached end of command w/out balanced doublebraces + EK_ENG_NOCLOSING, + + // Tokenizer Errors + // Found an unexpected grouping token + EK_TOK_UNGROUP, + // Invalid base for a flexadecimal number + EK_TOK_INVBASE, + // Invalid flexadecimal number in a given base + EK_TOK_INVFLEX, + + // Evaluator Errors + // Unknown node type + EK_EVAL_INVNODE, + // Incorrect # of args to binary operator + EK_EVAL_INVBIN, + // Incorrect # of args to unary operator + EK_EVAL_INVUNARY, + // Unknown binary operator + EK_EVAL_UNBIN, + // Unknown unary operator + EK_EVAL_UNUNARY, + // Math on strings doesn't work + EK_EVAL_STRINGMATH, + // Attempted divide by zero + EK_EVAL_DIVZERO, + // Attempted to divide dice + EK_EVAL_DIVDICE, + // Unknown math operator + EK_EVAL_UNMATH, + // Unknown token reference + EK_EVAL_UNTOK, + // Unknown dice operator + EK_EVAL_UNDICE, + // Incorrect type to dice group operator + EK_EVAL_INVDGROUP, + // Incorrect type to other dice operator + EK_EVAL_INVDICE, + // Mismatched types to math operator + EK_EVAL_MISMATH, + + // Parser Error + // Group closing where there couldn't be an opener + EK_PARSE_NOCLOSE, + // Group closing without group opener + EK_PARSE_UNCLOSE, + // Incorrect # of arguments to binary operator + EK_PARSE_BINARY, + // Not enough operands to binary operator + EK_PARSE_UNOPERAND, + // Unrecognized token type + EK_PARSE_INVTOKEN, + + // Shunter Error + // Unary operator expected a operand, but got an operator + EK_SHUNT_NOTADV, + // Unary operator expected an operator, but got an operand + EK_SHUNT_NOTADJ, + // Unary operator expected an operator, but didn't find one + EK_SHUNT_NOOP, + // Asked for opening grouping operator, but couldn't find one + EK_SHUNT_NOGROUP, + // No group for group seperator to attach to + EK_SHUNT_INVSEP, + + // Stream Errors + // Attempted to switch to a non-existant stream + EK_STRM_NONEX, + // Can't delete the last stream + EK_STRM_LAST, + // Unknown stream command + EK_STRM_INVCOM, + + } + + public static enum ErrorMode { + WIZARD, DEV + } + + private ErrorMode mode; + + public void printError(ErrorKey key, String... args) { + switch(mode) { + case WIZARD: + System.out.println("\t? " + key.ordinal()); + break; + case DEV: + devError(key, args); + break; + default: + System.out.println("\tERROR ERROR: Unknown error mode " + mode); + } + } + + private void devError(ErrorKey key, String[] args) { + switch(key) { + case EK_DFN_PREDSYN: + System.out.printf("\tERROR: Incorrect define guard syntax %s\n", args[0]); + break; + case EK_DFN_SRCSYN: + System.out.printf("\tERROR: Incorrect define match syntax %s\n", args[0]); + break; + case EK_DFN_RECUR: + System.out.printf("\tERROR: Recursive define didn't converge after %s iterations." + + " Original string was %s, last iteration was %s\n", + args[0], args[1], args[2]); + break; + case EK_CONS_INVPRAG: + System.out.printf("\tERROR: Unknown pragma %s\n", args[0]); + break; + case EK_CONS_INVDEFINE: + System.out.printf("\tERROR: Improperly formatted define %s\n", args[0]); + break; + case EK_ENG_NOOPENING: + System.out.printf("\tERROR: Encountered closing doublebrace without" + + " matching opening doublebrace\n"); + break; + case EK_ENG_NOCLOSING: + System.out.printf("\tERROR: Reached end of string before closing doublebrace was found\n"); + break; + case EK_TOK_UNGROUP: + System.out.printf("\tERROR: Unrecognized grouping token %s\n", args[0]); + break; + case EK_TOK_INVBASE: + System.out.printf("\tERROR: Invalid flexadecimal base %s\n", args[0]); + break; + case EK_TOK_INVFLEX: + System.out.printf("\tERROR: Invalid flexadecimal number %s in base %s\n", args[0], args[1]); + break; + case EK_EVAL_INVNODE: + System.out.printf("\tERROR: Unknown node in evaluator: %s\n", args[0]); + break; + case EK_EVAL_INVBIN: + System.out.printf("\tERROR: Binary operators take 2 operand, not %s\n" + + "\tProblem node is %s\n", args[0], args[1]); + break; + case EK_EVAL_UNBIN: + System.out.printf("\tERROR: Unknown binary operator %s\n", args[0]); + break; + case EK_EVAL_STRINGMATH: + System.out.printf("\tERROR: Math operators don't work on strings\n"); + break; + case EK_EVAL_DIVZERO: + System.out.printf("\tERROR: Attempted divide by zero\n"); + break; + case EK_EVAL_DIVDICE: + System.out.printf("\tERROR: Dice cannot be divided\n"); + break; + case EK_EVAL_UNMATH: + System.out.printf("\tERROR: Unknown math binary operator: %s\n", args[0]); + break; + case EK_EVAL_UNTOK: + System.out.printf("\tERROR: Unknown token ref %s\n", args[0]); + break; + case EK_EVAL_UNDICE: + System.out.printf("\tERROR: Unknown dice operator %s\n", args[0]); + break; + case EK_EVAL_INVDGROUP: + System.out.printf("\tERROR: Dice group operator expects scalar dice or integers," + + " not %s\n", args[0]); + break; + case EK_EVAL_INVDICE: + System.out.printf("\tERROR: Dice operators expect scalar dice, not %s\n", args[0]); + break; + case EK_EVAL_MISMATH: + System.out.printf("\tERROR: Math operators expect two operands of the same type\n"); + break; + case EK_PARSE_NOCLOSE: + System.out.printf("\tERROR: Group closing with no possible group opener\n"); + break; + case EK_PARSE_UNCLOSE: + System.out.printf("\tERROR: Found group closer without opener: (closing was %s" + + ", expected %s)\n", args[0], args[1]); + break; + case EK_PARSE_BINARY: + System.out.printf("\tERROR: Expected at least two operands\n"); + break; + case EK_PARSE_UNOPERAND: + System.out.printf("\tERROR: Operator %s expected more operands than provided\n", args[0]); + break; + case EK_PARSE_INVTOKEN: + System.out.printf("\tERROR: Unrecognized token type in parsing: %s\n", args[0]); + break; + case EK_SHUNT_NOTADV: + System.out.printf("\tERROR: Unary operator %s is an adjective, not an adverb. It can't be" + + " applied to the operator %s\n", args[0], args[1]); + break; + case EK_SHUNT_NOTADJ: + System.out.printf("\tERROR: Unary operator %s is an adjective, not an adverb. It can't be" + + " applied to the operator %s\n", args[0], args[1]); + break; + case EK_SHUNT_NOOP: + System.out.printf("\tERROR: Unary operator %s is an adverb, but there is no operator" + + " to apply it to\n", args[0]); + break; + case EK_SHUNT_NOGROUP: + System.out.printf("\tERROR: Couldn't find matching grouping %s (expected %s)\n", + args[0], args[1]); + break; + case EK_SHUNT_INVSEP: + System.out.printf("\tERROR: Couldn't find grouper for group seperator to attach to\n"); + break; + case EK_STRM_NONEX: + System.out.printf("\tERROR: Attempted to switch to non-existent stream\n"); + break; + case EK_STRM_LAST: + System.out.printf("\tERROR: Cannot delete last stream\n"); + break; + case EK_STRM_INVCOM: + System.out.printf("\tERROR: Unknown stream control command %s\n", args[0]); + break; + default: + System.out.printf("\tERROR ERROR: Unknown error key %s\n", key); + } + } + + public final static Errors inst; + + static { + inst = new Errors(); + + inst.mode = ErrorMode.DEV; + } +} |
