diff options
| author | Benjamin J. Culkin <bjculkin@mix.wvu.edu> | 2017-10-25 12:10:14 -0300 |
|---|---|---|
| committer | Benjamin J. Culkin <bjculkin@mix.wvu.edu> | 2017-10-25 12:10:14 -0300 |
| commit | 7bda9de511a5642efb297eae98c6ea7c42b27754 (patch) | |
| tree | dff1aa772b9ac088c5bd07b8d10d944cbff89f96 /base/src/bjc/dicelang/Errors.java | |
| parent | f028ea6dc555fc5192a96b00b8e96e90dbf6de55 (diff) | |
Start switch to maven modules
Diffstat (limited to 'base/src/bjc/dicelang/Errors.java')
| -rw-r--r-- | base/src/bjc/dicelang/Errors.java | 523 |
1 files changed, 523 insertions, 0 deletions
diff --git a/base/src/bjc/dicelang/Errors.java b/base/src/bjc/dicelang/Errors.java new file mode 100644 index 0000000..255db75 --- /dev/null +++ b/base/src/bjc/dicelang/Errors.java @@ -0,0 +1,523 @@ +package bjc.dicelang; + +/** + * Repository for error messages. + * + * @TODO 10/08/17 Ben Culkin :ErrorRefactor + * This way of handling error messages is not easy to deal with. Something + * else needs to be done, but I'm not sure what at the moment. + * + * @author EVE + * + */ +public class Errors { + /** + * The types of error message. + * + * @author EVE + * + */ + 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 double-brace w/out opening double-brace + */ + EK_ENG_NOOPENING, + /** + * Reached end of command w/out balanced double-braces + */ + 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 dice creation operator + */ + EK_EVAL_INVDCREATE, + /** + * Incorrect type to other dice operator + */ + EK_EVAL_INVDICE, + /** + * Mismatched types to math operator + */ + EK_EVAL_MISMATH, + /** + * Incorrect type to string operator + */ + EK_EVAL_INVSTRING, + /** + * Unknown string operator + */ + EK_EVAL_UNSTRING, + + /* 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, + /** + * Attempted to chain non-associative operator + */ + EK_SHUNT_NOTASSOC, + + /* 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, + + /* SCL Errors */ + /** + * Unknown SCL token + */ + EK_SCL_INVTOKEN, + /** + * Mismatched quote in SCL command + */ + EK_SCL_MMQUOTE, + /** + * Stack underflow in SCL command + */ + EK_SCL_SUNDERFLOW, + /** + * Unknown word in SCL command + */ + EK_SCL_UNWORD, + /** + * Invalid argument to SCL command + */ + EK_SCL_INVARG, + + /* CLI Argument Errors */ + /** + * Unknown CLI argument + */ + EK_CLI_UNARG, + /** + * Missing sub-argument to argument + */ + EK_CLI_MISARG, + /** + * Invalid define type + */ + EK_CLI_INVDFNTYPE, + + /* Miscellaneous errors */ + /** + * Unknown I/O problem + */ + EK_MISC_IOEX, + /** + * File not found + */ + EK_MISC_NOFILE, + + /* Dice errors. */ + /* Recieved the wrong sort of expression to a die. */ + EK_DICE_INVTYPE, + } + + /** + * The mode for the type of error messages to print out. + * + * @author EVE + * + */ + public static enum ErrorMode { + /** + * Output error messages for wizards. + */ + WIZARD, + /** + * Output error messages for developers. + */ + DEV + } + + private ErrorMode mode; + + /** + * Print an error. + * + * @param key + * The key of the error. + * + * @param args + * The arguments for the error. + */ + public void printError(final ErrorKey key, final String... args) { + switch (mode) { + case WIZARD: + if (key == ErrorKey.EK_MISC_NOFILE) { + System.out.println("\t? 404"); + } else { + System.out.println("\t? " + key.ordinal()); + } + + break; + + case DEV: + devError(key, args); + break; + + default: + System.out.println("\tERROR ERROR: Unknown error mode " + mode); + } + } + + private static void devError(final ErrorKey key, final 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 operands, 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_INVDCREATE: + System.out.printf("\tERROR: Dice creation operator expects integers," + " not %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_EVAL_INVSTRING: + System.out.printf("\tERROR: Incorrect type %s to string operator\n", args[0]); + break; + + case EK_EVAL_UNSTRING: + System.out.printf("\tERROR: Unknown string operator %s\n", args[0]); + 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_NOTASSOC: + System.out.printf("\tERROR: Attempted to chain non-associative operator %s\n", args[0]); + 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; + + case EK_SCL_INVTOKEN: + System.out.printf("\tERROR: Unknown SCL token %s\n", args[0]); + break; + + case EK_SCL_MMQUOTE: + System.out.printf("\tERROR: Mismatched delimiter in SCL command\n"); + break; + + case EK_SCL_SUNDERFLOW: + System.out.printf("\tERROR: Not enough items in stack for word %s\n", args[0]); + break; + + case EK_SCL_UNWORD: + System.out.printf("\tERROR: Unknown word %s\n", args[0]); + break; + + case EK_CLI_UNARG: + System.out.printf("\tERROR: Unknown argument %s\n", args[0]); + break; + + case EK_CLI_MISARG: + System.out.printf("\tERROR: Missing subargument to command %s", args[0]); + break; + + case EK_CLI_INVDFNTYPE: + System.out.printf("\tERROR: Invalid define type %s\n", args[0]); + break; + + case EK_MISC_IOEX: + System.out.printf("\tERROR: I/O problem with file\n"); + break; + + case EK_MISC_NOFILE: + System.out.printf("\tERROR: No such file %s\n", args[0]); + break; + + default: + System.out.printf("\tERROR ERROR: Unknown error key %s\n", key); + } + } + + /** + * The instance of the errors. + */ + public final static Errors inst; + + static { + inst = new Errors(); + + inst.mode = ErrorMode.DEV; + } +} |
