diff options
| author | EVE <EVE@EVE-PC> | 2017-03-13 19:10:16 -0400 |
|---|---|---|
| committer | EVE <EVE@EVE-PC> | 2017-03-13 19:10:16 -0400 |
| commit | 94daa6feed501fcda1c12653ec21ad1a6b38f00d (patch) | |
| tree | 0490d21b7985962f8da6c5643275ee4735c92d07 /dice-lang/src | |
| parent | 01136c6796e21f023713e026674576d8e623462d (diff) | |
Update. Work on CLI help
Diffstat (limited to 'dice-lang/src')
| -rw-r--r-- | dice-lang/src/bjc/dicelang/CLIArgsParser.java | 85 | ||||
| -rw-r--r-- | dice-lang/src/bjc/dicelang/CompilerTweaker.java | 8 | ||||
| -rw-r--r-- | dice-lang/src/bjc/dicelang/Define.java | 2 | ||||
| -rw-r--r-- | dice-lang/src/bjc/dicelang/DiceLangConsole.java | 3 |
4 files changed, 77 insertions, 21 deletions
diff --git a/dice-lang/src/bjc/dicelang/CLIArgsParser.java b/dice-lang/src/bjc/dicelang/CLIArgsParser.java index 702d20c..2a24ac7 100644 --- a/dice-lang/src/bjc/dicelang/CLIArgsParser.java +++ b/dice-lang/src/bjc/dicelang/CLIArgsParser.java @@ -8,15 +8,45 @@ import java.util.Scanner; import static bjc.dicelang.Errors.ErrorKey.*; +/** + * Parse CLI arguments. + * + * @author Ben Culkin + * + */ public class CLIArgsParser { + /** + * Parse the provided set of CLI arguments. + * + * @param args The CLI arguments to parse. + * @param eng The engine to affect with parsing. + * + * @return Whether or not to continue to the DiceLang repl. + */ public static boolean parseArgs(String[] args, DiceLangEngine eng) { - if (args.length < 0) + if (args.length < 0) { return true; + } if (args.length == 1 && (args[0].equals("--help") || args[0].equals("-h"))) { - /* - * @TODO show help - */ + System.out.println("Help for DiceLang v0.2 CLI arguments:"); + System.out.println("\t-d or --debug\tTurn on debug mode."); + System.out.println("\t\tTurns on debug mode, which prints additional information that may be useful."); + System.out.println("\t-nd or --no-debug\tTurn off debug mode."); + System.out.println("\t\tTurns off debug mode."); + System.out.println("\t-po or --postfix\tTurn on postfix mode."); + System.out.println("\t\tTurns on postfix mode, which disables the shunter."); + System.out.println("\t-npo or --no-postfix\tTurn off postfix mode."); + System.out.println("\t\tTurns off postfix mode."); + System.out.println("\t-pr or --prefix\tTurn on prefix mode."); + System.out.println("\t\tTurns on prefix mode, which reverses the expression instead of shunting it."); + System.out.println("\t-npr or --no-prefix\tTurn off prefix mode."); + System.out.println("\t\tTurns off prefix mode."); + System.out.println("\t-se or --step-eval\tTurn on step-eval mode."); + System.out.println("\t\tTurns on step-evaluation, which shows the evaluation process step-by-step. Currently slightly broken."); + System.out.println("\t-nse or --no-step-eval\tTurn off step-eval mode."); + System.out.println("\t\tTurns off step-evaluation."); + System.out.println("\t-D or "); System.exit(0); } @@ -28,55 +58,65 @@ public class CLIArgsParser { switch (arg) { case "-d": case "--debug": - if (!eng.toggleDebug()) + if (!eng.toggleDebug()) { eng.toggleDebug(); + } break; case "-nd": case "--no-debug": - if (eng.toggleDebug()) + if (eng.toggleDebug()) { eng.toggleDebug(); + } break; case "-po": case "--postfix": - if (!eng.togglePostfix()) + if (!eng.togglePostfix()) { eng.togglePostfix(); + } break; case "-npo": case "--no-postfix": - if (eng.togglePostfix()) + if (eng.togglePostfix()) { eng.togglePostfix(); + } break; case "-pr": case "--prefix": - if (!eng.togglePrefix()) + if (!eng.togglePrefix()) { eng.togglePrefix(); + } break; case "-npr": case "--no-prefix": - if (eng.togglePrefix()) + if (eng.togglePrefix()) { eng.togglePrefix(); + } break; case "-se": case "--stepeval": - if (!eng.toggleStepEval()) + if (!eng.toggleStepEval()) { eng.toggleStepEval(); + } break; case "-nse": case "--no-stepeval": - if (eng.toggleStepEval()) + if (eng.toggleStepEval()) { eng.toggleStepEval(); + } break; case "-D": case "--define": i = simpleDefine(i, args, eng); - if (i == -1) + if (i == -1) { return false; + } break; case "-df": case "--define-file": i = defineFile(i, args, eng); - if (i == -1) + if (i == -1) { return false; + } break; default: Errors.inst.printError(EK_CLI_UNARG, arg); @@ -96,15 +136,20 @@ public class CLIArgsParser { if (i >= (args.length - 2)) { Define dfn = new Define(5, false, false, false, null, args[i + 1], Arrays.asList("")); - if (dfn.inError) + if (dfn.inError) { return -1; + } + eng.addLineDefine(dfn); return i + 1; } Define dfn = new Define(5, false, false, false, null, args[i + 1], Arrays.asList(args[i + 2])); - if (dfn.inError) + + if (dfn.inError) { return -1; + } + eng.addLineDefine(dfn); return i + 2; } @@ -123,16 +168,18 @@ public class CLIArgsParser { String ln = scan.nextLine(); Define dfn = parseDefine(ln.substring(ln.indexOf(' '))); - if (dfn == null || dfn.inError) + if (dfn == null || dfn.inError) { return -1; + } if (ln.startsWith("line")) { eng.addLineDefine(dfn); } else if (ln.startsWith("token")) { eng.addTokenDefine(dfn); } else { - Errors.inst.printError(EK_CLI_INVDFNTYPE, - ln.substring(0, ln.indexOf(' '))); + String defnType = ln.substring(0, ln.indexOf(' ')); + + Errors.inst.printError(EK_CLI_INVDFNTYPE, defnType); return -1; } } diff --git a/dice-lang/src/bjc/dicelang/CompilerTweaker.java b/dice-lang/src/bjc/dicelang/CompilerTweaker.java index 3779f2b..95a8761 100644 --- a/dice-lang/src/bjc/dicelang/CompilerTweaker.java +++ b/dice-lang/src/bjc/dicelang/CompilerTweaker.java @@ -82,4 +82,12 @@ public class CompilerTweaker { opExpander.compile();
}
+ /**
+ * Change the max no. of times defines are allowed to recur.
+ *
+ * @param times The number of times to allow defines to recur.
+ */
+ public void setDefineRecurLimit(int times) {
+ Define.MAX_RECURS = times;
+ }
}
diff --git a/dice-lang/src/bjc/dicelang/Define.java b/dice-lang/src/bjc/dicelang/Define.java index 1e4d89b..b7d196d 100644 --- a/dice-lang/src/bjc/dicelang/Define.java +++ b/dice-lang/src/bjc/dicelang/Define.java @@ -15,7 +15,7 @@ public class Define implements UnaryOperator<String>, Comparable<Define> { LINE, TOKEN } - public static final int MAX_RECURS = 10; + public static int MAX_RECURS = 10; public final int priority; public final boolean inError; diff --git a/dice-lang/src/bjc/dicelang/DiceLangConsole.java b/dice-lang/src/bjc/dicelang/DiceLangConsole.java index 1b91746..1e4bf32 100644 --- a/dice-lang/src/bjc/dicelang/DiceLangConsole.java +++ b/dice-lang/src/bjc/dicelang/DiceLangConsole.java @@ -23,8 +23,9 @@ public class DiceLangConsole { eng = new DiceLangEngine(); - if (!CLIArgsParser.parseArgs(args, eng)) + if (!CLIArgsParser.parseArgs(args, eng)) { System.exit(1); + } Terminal.setupTerminal(); } |
