diff options
| author | bculkin2442 <bjculkin@mix.wvu.edu> | 2017-02-10 05:39:39 -0500 |
|---|---|---|
| committer | bculkin2442 <bjculkin@mix.wvu.edu> | 2017-02-10 05:39:39 -0500 |
| commit | 6ca8c6764a8b8769a7a295c0479962a6588580a2 (patch) | |
| tree | 133e1766191953ecb7f886937a59b8f1fcacd8ec | |
| parent | a73de1b2ef2732917f4e3f448f10766a989c8a1a (diff) | |
Working string literals
| -rw-r--r-- | dice-lang/pom.xml | 58 | ||||
| -rw-r--r-- | dice-lang/src/bjc/dicelang/v2/DiceLangConsole.java | 4 | ||||
| -rw-r--r-- | dice-lang/src/bjc/dicelang/v2/DiceLangEngine.java | 99 |
3 files changed, 104 insertions, 57 deletions
diff --git a/dice-lang/pom.xml b/dice-lang/pom.xml index b98e073..a3a3f6f 100644 --- a/dice-lang/pom.xml +++ b/dice-lang/pom.xml @@ -1,26 +1,34 @@ <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <groupId>bjc</groupId> - <artifactId>dice-lang</artifactId> - <version>0.0.1-SNAPSHOT</version> - <build> - <sourceDirectory>src</sourceDirectory> - <plugins> - <plugin> - <artifactId>maven-compiler-plugin</artifactId> - <version>3.3</version> - <configuration> - <source>1.8</source> - <target>1.8</target> - </configuration> - </plugin> - </plugins> - </build> - <dependencies> - <dependency> - <groupId>bjc</groupId> - <artifactId>BJC-Utils2</artifactId> - <version>0.1.0-SNAPSHOT</version> - </dependency> - </dependencies> -</project>
\ No newline at end of file + <modelVersion>4.0.0</modelVersion> + <groupId>bjc</groupId> + <artifactId>dice-lang</artifactId> + <version>0.0.1-SNAPSHOT</version> + <build> + <sourceDirectory>src</sourceDirectory> + <plugins> + <plugin> + <artifactId>maven-compiler-plugin</artifactId> + <version>3.3</version> + <configuration> + <source>1.8</source> + <target>1.8</target> + </configuration> + </plugin> + <plugin> + <groupId>org.codehaus.mojo</groupId> + <artifactId>exec-maven-plugin</artifactId> + <version>1.5.0</version> + <configuration> + <mainClass>bjc.dicelang.v2.DiceLangConsole</mainClass> + </configuration> + </plugin> + </plugins> + </build> + <dependencies> + <dependency> + <groupId>bjc</groupId> + <artifactId>BJC-Utils2</artifactId> + <version>0.1.0-SNAPSHOT</version> + </dependency> + </dependencies> +</project> diff --git a/dice-lang/src/bjc/dicelang/v2/DiceLangConsole.java b/dice-lang/src/bjc/dicelang/v2/DiceLangConsole.java index 741d6f5..54bdaec 100644 --- a/dice-lang/src/bjc/dicelang/v2/DiceLangConsole.java +++ b/dice-lang/src/bjc/dicelang/v2/DiceLangConsole.java @@ -1,4 +1,4 @@ -package bjc.dicelang.examples.v2; +package bjc.dicelang.v2; import java.util.Scanner; @@ -36,7 +36,7 @@ public class DiceLangConsole { commandNumber += 1; System.out.printf("(%d) dice-lang> ", commandNumber); - String comm = scn.nextLine(); + comm = scn.nextLine(); } scn.close(); diff --git a/dice-lang/src/bjc/dicelang/v2/DiceLangEngine.java b/dice-lang/src/bjc/dicelang/v2/DiceLangEngine.java index 2bfa53a..51006d7 100644 --- a/dice-lang/src/bjc/dicelang/v2/DiceLangEngine.java +++ b/dice-lang/src/bjc/dicelang/v2/DiceLangEngine.java @@ -1,5 +1,7 @@ -package bjc.utils.dicelang.v2; +package bjc.dicelang.v2; +import bjc.utils.data.IPair; +import bjc.utils.data.Pair; import bjc.utils.funcdata.FunctionalList; import bjc.utils.funcdata.FunctionalMap; import bjc.utils.funcdata.FunctionalStringTokenizer; @@ -7,6 +9,7 @@ import bjc.utils.funcdata.IList; import bjc.utils.funcdata.IMap; import bjc.utils.funcutils.ListUtils; +import java.util.Arrays; import java.util.Deque; import java.util.LinkedList; @@ -47,7 +50,7 @@ public class DiceLangEngine { public boolean runCommand(String command) { // Split the command into tokens IList<String> tokens = FunctionalStringTokenizer - .fromString(currentLine) + .fromString(command) .toList(); // Will hold tokens with string literals removed @@ -63,9 +66,18 @@ public class DiceLangEngine { if(!success) return success; - if(debugMode) - System.out.println("Command after destringing: " + if(debugMode) { + System.out.println("\tCommand after destringing: " + destringed.toString()); + + System.out.println("\tString literals in table"); + stringLiterals.forEach((key, val) -> { + System.out.printf("\t\tName: (%s)\tValue: (%s)\n", + key, val); + }); + } + + return true; } private boolean destringTokens(IList<String> tokens, @@ -76,43 +88,70 @@ public class DiceLangEngine { // The current string literal StringBuilder currentLiteral = new StringBuilder(); + String literalName = "stringLiteral"; for(String token : tokens.toIterable()) { - String[] tokenParts = token.split("^(?!\\\\\")\""); + if(token.startsWith("\"")) { + if(token.endsWith("\"")) { + String litName = literalName + nextLiteral++; + + stringLiterals.put(litName, + token.substring(1, token.length() - 1)); + destringed.add(litName); + + continue; + } - if(tokenParts.length == 1) { - // Insert token into correct place if(stringMode) { - currentLiteral.add(tokenParts[0]); + // @TODO make this not an error + System.out.printf("\tPARSER ERROR: Initial" + +" quotes can only start strings\n"); } 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); - } + currentLiteral.append(token.substring(1) + " "); - // We found a quote. Toggle string mode - // and collect the literal - stringMode = !stringMode; + stringMode = true; + } + } else if (token.endsWith("\"")) { + if(!stringMode) { + // @TODO make this not an error + System.out.printf("\tPARSER ERROR: Terminal" + +" quotes can only end strings\n"); + return false; + } else { + currentLiteral.append( + token.substring(0, token.length() - 1)); - if(debugMode) - System.out.printf("DEBUG: Parsed string" - + " literal (" - + currentLiteral.toString() + ")"); + String litName = literalName + nextLiteral++; - stringLiterals.put("stringLiteral" - + nextLiteral, + stringLiterals.put(litName, currentLiteral.toString()); - destringed.add("stringLiteral" + nextLiteral); + destringed.add(litName); - nextLiteral += 1; currentLiteral = new StringBuilder(); + + stringMode = false; + } + } else if (token.contains("\"")) { + if(token.contains("\\\"")) { + if(stringMode) { + currentLiteral.append(token + " "); + } else { + System.out.printf("\tERROR: Escaped quote " + + " outside of string literal\n"); + return false; + } + } else { + // @TODO make this not an error + System.out.printf("\tPARSER ERROR: A string" + + " literal must be delimited by spaces" + + " for now.\n"); + return false; + } + } else { + if(stringMode) { + currentLiteral.append(token + " "); + } else { + destringed.add(token); } } } |
