summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEVE <EVE@EVE-PC>2017-03-13 19:10:16 -0400
committerEVE <EVE@EVE-PC>2017-03-13 19:10:16 -0400
commit94daa6feed501fcda1c12653ec21ad1a6b38f00d (patch)
tree0490d21b7985962f8da6c5643275ee4735c92d07
parent01136c6796e21f023713e026674576d8e623462d (diff)
Update. Work on CLI help
-rw-r--r--dice-lang/src/bjc/dicelang/CLIArgsParser.java85
-rw-r--r--dice-lang/src/bjc/dicelang/CompilerTweaker.java8
-rw-r--r--dice-lang/src/bjc/dicelang/Define.java2
-rw-r--r--dice-lang/src/bjc/dicelang/DiceLangConsole.java3
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();
}