diff options
Diffstat (limited to 'dice-lang')
| -rw-r--r-- | dice-lang/src/bjc/dicelang/examples/.DiceExpressionPreparer.java.swp | bin | 0 -> 12288 bytes | |||
| -rw-r--r-- | dice-lang/src/bjc/dicelang/v2/.DiceLangEngine.java.swp | bin | 0 -> 12288 bytes | |||
| -rw-r--r-- | dice-lang/src/bjc/dicelang/v2/DiceLangConsole.java | 50 | ||||
| -rw-r--r-- | dice-lang/src/bjc/dicelang/v2/DiceLangEngine.java | 116 | ||||
| -rw-r--r-- | dice-lang/tags | 12 |
5 files changed, 178 insertions, 0 deletions
diff --git a/dice-lang/src/bjc/dicelang/examples/.DiceExpressionPreparer.java.swp b/dice-lang/src/bjc/dicelang/examples/.DiceExpressionPreparer.java.swp Binary files differnew file mode 100644 index 0000000..04eb9f7 --- /dev/null +++ b/dice-lang/src/bjc/dicelang/examples/.DiceExpressionPreparer.java.swp diff --git a/dice-lang/src/bjc/dicelang/v2/.DiceLangEngine.java.swp b/dice-lang/src/bjc/dicelang/v2/.DiceLangEngine.java.swp Binary files differnew file mode 100644 index 0000000..46cc355 --- /dev/null +++ b/dice-lang/src/bjc/dicelang/v2/.DiceLangEngine.java.swp diff --git a/dice-lang/src/bjc/dicelang/v2/DiceLangConsole.java b/dice-lang/src/bjc/dicelang/v2/DiceLangConsole.java new file mode 100644 index 0000000..741d6f5 --- /dev/null +++ b/dice-lang/src/bjc/dicelang/v2/DiceLangConsole.java @@ -0,0 +1,50 @@ +package bjc.dicelang.examples.v2; + +import java.util.Scanner; + +public class DiceLangConsole { + private int commandNumber; + + private DiceLangEngine eng; + + public DiceLangConsole(String[] args) { + // @TODO do something with the args + + commandNumber = 0; + + eng = new DiceLangEngine(); + } + + public void run() { + System.out.println("dice-lang v0.2"); + + Scanner scn = new Scanner(System.in); + + System.out.printf("(%d) dice-lang> ", commandNumber); + String comm = scn.nextLine(); + + while(!comm.equals("quit")) { + System.out.printf("\tRaw command: %s\n", comm); + + boolean success = eng.runCommand(comm); + + if(success) + System.out.println("Command completed succesfully"); + else + System.out.println("Command execution failed"); + + commandNumber += 1; + + System.out.printf("(%d) dice-lang> ", commandNumber); + String comm = scn.nextLine(); + } + + scn.close(); + } + + public static void main(String[] args) { + DiceLangConsole console = new DiceLangConsole(args); + + console.run(); + } +} diff --git a/dice-lang/src/bjc/dicelang/v2/DiceLangEngine.java b/dice-lang/src/bjc/dicelang/v2/DiceLangEngine.java new file mode 100644 index 0000000..a5a9ca4 --- /dev/null +++ b/dice-lang/src/bjc/dicelang/v2/DiceLangEngine.java @@ -0,0 +1,116 @@ +package bjc.utils.dicelang.v2; + +import bjc.utils.funcdata.FunctionalList; +import bjc.utils.funcdata.FunctionalMap; +import bjc.utils.funcdata.FunctionalStringTokenizer; +import bjc.utils.funcdata.IList; +import bjc.utils.funcdata.IMap; +import bjc.utils.funcutils.ListUtils; + +import java.util.Deque; +import java.util.LinkedList; + +public class DiceLangEngine { + // Input rules for processing tokens + private Deque<IPair<String, String>> opExpansionTokens; + private Deque<IPair<String, String>> deaffixationTokens; + + // ID for generation of string literal variables + private int nextLiteral; + + // Debug indicator + private boolean debugMode; + + public DiceLangEngine() { + opExpansionTokens = new LinkedList<>(); + + opExpansionTokens.add(new Pair<>("+", "\\+")); + opExpansionTokens.add(new Pair<>("-", "-")); + opExpansionTokens.add(new Pair<>("*", "\\*")); + opExpansionTokens.add(new Pair<>("/", "/")); + opExpansionTokens.add(new Pair<>(":=", ":=")); + opExpansionTokens.add(new Pair<>("=>", "=>")); + + deaffixationTokens = new LinkedList<>(); + + deaffixationTokens.add(new Pair<>("(", "\\(")); + deaffixationTokens.add(new Pair<>(")", "\\(")); + deaffixationTokens.add(new Pair<>("[", "\\[")); + deaffixationTokens.add(new Pair<>("]", "\\]")); + + nextLiteral = 1; + + // @TODO make configurable + debugMode = true; + } + + public boolean runCommand(String command) { + // Split the command into tokens + IList<String> tokens = FunctionalStringTokenizer + .fromString(currentLine) + .toList(); + + // Will hold tokens with string literals removed + IList<String> destringed = new FunctionalList<>(); + + // Where we keep the string literals + // @TODO put these in the sym-table early instead + // once there is a sym-table + IMap<String, String> stringLiterals = new FunctionalMap<>(); + + // Are we parsing a string literal? + boolean stringMode = false; + + // The current string literal + StringBuilder currentLiteral = new StringBuilder(); + + for(String token : tokens.toIterable()) { + String[] tokenParts = token.split("^(?!\\\\\")\""); + + if(tokenParts.length == 1) { + // Insert token into correct place + if(stringMode) { + currentLiteral.add(tokenParts[0]); + } else { + destringed.add(tokenParts[0]); + } + } else { + // Handle multiple "'s in a token + for(String stringPart : tokenParts) { + // Insert token into correct place + if(stringMode) { + currentLiteral.add(stringPart); + } else { + destringed.add(stringPart); + } + + // We found a quote. Toggle string mode + // and collect the literal + stringMode = !stringMode; + + if(debugMode) + System.out.printf("DEBUG: Parsed string" + + " literal (" + + currentLiteral.toString() + ")"); + + stringLiterals.put("stringLiteral" + + nextLiteral, + currentLiteral.toString()); + destringed.add("stringLiteral" + nextLiteral); + + nextLiteral += 1; + currentLiteral = new StringBuilder(); + } + } + } + + if(stringMode) { + System.out.printf("\tERROR: Unclosed string literal (%s" + + ").\n", currentLiteral.toString()); + } + + if(debugMode) + System.out.println("Command after destringing: " + + destringed.toString()); + } +} diff --git a/dice-lang/tags b/dice-lang/tags index 6b6d0e0..89199b0 100644 --- a/dice-lang/tags +++ b/dice-lang/tags @@ -53,6 +53,10 @@ DiceExpressionParser src/bjc/dicelang/DiceExpressionParser.java /^public class D DiceExpressionParserTest src/bjc/dicelang/examples/DiceExpressionParserTest.java /^public class DiceExpressionParserTest {$/;" c DiceExpressionPreparer src/bjc/dicelang/examples/DiceExpressionPreparer.java /^public class DiceExpressionPreparer {$/;" c DiceExpressionType src/bjc/dicelang/DiceExpressionType.java /^public enum DiceExpressionType {$/;" g +DiceLangConsole src/bjc/dicelang/v2/DiceLangConsole.java /^ public DiceLangConsole(String[] args) {$/;" m class:DiceLangConsole +DiceLangConsole src/bjc/dicelang/v2/DiceLangConsole.java /^public class DiceLangConsole {$/;" c +DiceLangEngine src/bjc/dicelang/v2/DiceLangEngine.java /^ public DiceLangEngine() {$/;" m class:DiceLangEngine +DiceLangEngine src/bjc/dicelang/v2/DiceLangEngine.java /^public class DiceLangEngine {$/;" c DiceLanguageState src/bjc/dicelang/examples/DiceLanguageState.java /^ public DiceLanguageState() {$/;" m class:DiceLanguageState DiceLanguageState src/bjc/dicelang/examples/DiceLanguageState.java /^ public DiceLanguageState(DiceExpressionParser left,$/;" m class:DiceLanguageState DiceLanguageState src/bjc/dicelang/examples/DiceLanguageState.java /^public class DiceLanguageState$/;" c @@ -163,6 +167,8 @@ bjc.dicelang.examples src/bjc/dicelang/examples/DiceExpressionParserTest.java /^ bjc.dicelang.examples src/bjc/dicelang/examples/DiceExpressionPreparer.java /^package bjc.dicelang.examples;$/;" p bjc.dicelang.examples src/bjc/dicelang/examples/DiceLanguageState.java /^package bjc.dicelang.examples;$/;" p bjc.dicelang.examples src/bjc/dicelang/examples/DiceLanguageTest.java /^package bjc.dicelang.examples;$/;" p +bjc.dicelang.examples.v2 src/bjc/dicelang/v2/DiceLangConsole.java /^package bjc.dicelang.examples.v2;$/;" p +bjc.utils.dicelang.v2 src/bjc/dicelang/v2/DiceLangEngine.java /^package bjc.utils.dicelang.v2;$/;" p buildOperations src/bjc/dicelang/ast/DiceASTEvaluator.java /^ private static IMap<IDiceASTNode, IOperatorCollapser> buildOperations($/;" m class:DiceASTEvaluator file: canOptimize src/bjc/dicelang/ComplexDice.java /^ public boolean canOptimize() {$/;" m class:ComplexDice canOptimize src/bjc/dicelang/CompoundDice.java /^ public boolean canOptimize() {$/;" m class:CompoundDice @@ -174,6 +180,7 @@ canOptimize src/bjc/dicelang/ast/nodes/ILiteralDiceNode.java /^ boolean canOptim canOptimize src/bjc/dicelang/ast/nodes/IntegerLiteralNode.java /^ public boolean canOptimize() {$/;" m class:IntegerLiteralNode collapse src/bjc/dicelang/ast/optimization/ArithmeticCollapser.java /^ public ITree<IDiceASTNode> collapse($/;" m class:ArithmeticCollapser combineArrayResults src/bjc/dicelang/ast/ArithmeticCollapser.java /^ private IList<IResult> combineArrayResults(IResult accumulatedValue,$/;" m class:ArithmeticCollapser file: +commandNumber src/bjc/dicelang/v2/DiceLangConsole.java /^ private int commandNumber;$/;" f class:DiceLangConsole file: compoundCollapser src/bjc/dicelang/ast/optimization/ConstantCollapser.java /^ private static final ArithmeticCollapser compoundCollapser = new ArithmeticCollapser($/;" f class:ConstantCollapser file: condense src/bjc/dicelang/ast/optimization/OperationCondenser.java /^ public static ITree<IDiceASTNode> condense(ITree<IDiceASTNode> ast) {$/;" m class:OperationCondenser containsSimpleVariable src/bjc/dicelang/ast/DiceASTUtils.java /^ public static boolean containsSimpleVariable($/;" m class:DiceASTUtils @@ -204,6 +211,7 @@ doCondense src/bjc/dicelang/ast/optimization/OperationCondenser.java /^ private doSanitize src/bjc/dicelang/ast/DiceASTReferenceSanitizer.java /^ private static ITree<IDiceASTNode> doSanitize(ITree<IDiceASTNode> ast,$/;" m class:DiceASTReferenceSanitizer file: doSingleSanitize src/bjc/dicelang/ast/DiceASTReferenceSanitizer.java /^ private static ITree<IDiceASTNode> doSingleSanitize($/;" m class:DiceASTReferenceSanitizer file: dummyData src/bjc/dicelang/ast/DummyResult.java /^ private String dummyData;$/;" f class:DummyResult file: +eng src/bjc/dicelang/v2/DiceLangConsole.java /^ private DiceLangEngine eng;$/;" f class:DiceLangConsole file: enviroment src/bjc/dicelang/ReferenceDiceExpression.java /^ private Map<String, IDiceExpression> enviroment;$/;" f class:ReferenceDiceExpression file: equals src/bjc/dicelang/ast/nodes/VariableDiceNode.java /^ public boolean equals(Object obj) {$/;" m class:VariableDiceNode evaluateAST src/bjc/dicelang/ast/DiceASTEvaluator.java /^ public static IResult evaluateAST(ITree<IDiceASTNode> expression,$/;" m class:DiceASTEvaluator @@ -253,6 +261,7 @@ literalToInteger src/bjc/dicelang/ast/DiceASTUtils.java /^ public static int lit main src/bjc/dicelang/examples/DiceASTLanguageTest.java /^ public static void main(String[] args) {$/;" m class:DiceASTLanguageTest main src/bjc/dicelang/examples/DiceExpressionParserTest.java /^ public static void main(String[] args) {$/;" m class:DiceExpressionParserTest main src/bjc/dicelang/examples/DiceLanguageTest.java /^ public static void main(String[] args) {$/;" m class:DiceLanguageTest +main src/bjc/dicelang/v2/DiceLangConsole.java /^ public static void main(String[] args) {$/;" m class:DiceLangConsole multiply src/bjc/dicelang/DiceExpressionBuilder.java /^ public DiceExpressionBuilder multiply(IDiceExpression exp) {$/;" m class:DiceExpressionBuilder multiply src/bjc/dicelang/DiceExpressionBuilder.java /^ public DiceExpressionBuilder multiply(int num) {$/;" m class:DiceExpressionBuilder multiplyCollapser src/bjc/dicelang/ast/optimization/ConstantCollapser.java /^ private static final ArithmeticCollapser multiplyCollapser = new ArithmeticCollapser($/;" f class:ConstantCollapser file: @@ -261,6 +270,7 @@ nSides src/bjc/dicelang/Die.java /^ private int nSides;$/;" f class:Die file: name src/bjc/dicelang/BindingDiceExpression.java /^ private String name;$/;" f class:BindingDiceExpression file: name src/bjc/dicelang/ReferenceDiceExpression.java /^ private String name;$/;" f class:ReferenceDiceExpression file: number src/bjc/dicelang/ScalarDie.java /^ private int number;$/;" f class:ScalarDie file: +opExpansionTokens src/bjc/dicelang/v2/DiceLangEngine.java /^ private Deque<IPair<String, String>> opExpansionTokens;$/;" f class:DiceLangEngine file: optimize src/bjc/dicelang/ComplexDice.java /^ public int optimize() {$/;" m class:ComplexDice optimize src/bjc/dicelang/CompoundDice.java /^ public int optimize() {$/;" m class:CompoundDice optimize src/bjc/dicelang/Die.java /^ public int optimize() {$/;" m class:Die @@ -300,6 +310,8 @@ roll src/bjc/dicelang/OperatorDiceExpression.java /^ public int roll() {$/;" m c roll src/bjc/dicelang/ReferenceDiceExpression.java /^ public int roll() {$/;" m class:ReferenceDiceExpression roll src/bjc/dicelang/ScalarDie.java /^ public int roll() {$/;" m class:ScalarDie rollReference src/bjc/dicelang/examples/DiceLanguageTest.java /^ private static void rollReference(String ln, DiceLanguageState stat) {$/;" m class:DiceLanguageTest file: +run src/bjc/dicelang/v2/DiceLangConsole.java /^ public void run() {$/;" m class:DiceLangConsole +runCommand src/bjc/dicelang/v2/DiceLangEngine.java /^ public boolean runCommand(String command) {$/;" m class:DiceLangEngine sanitize src/bjc/dicelang/ast/DiceASTReferenceSanitizer.java /^ public static ITree<IDiceASTNode> sanitize(ITree<IDiceASTNode> ast,$/;" m class:DiceASTReferenceSanitizer selectiveInline src/bjc/dicelang/ast/DiceASTInliner.java /^ public static ITree<IDiceASTNode> selectiveInline($/;" m class:DiceASTInliner shouldContinuePopping src/bjc/dicelang/ast/DiceASTParser.java /^ private static boolean shouldContinuePopping($/;" m class:DiceASTParser file: |
