handling marker tokens

This commit is contained in:
gnembon committed 2019-07-03 17:40:00 -03:00
1 parent ad97447bfd
commit b1df45a53b
5 files changed
+32 -9

No files matched your search

+2 -2
View File
@@ -4,8 +4,8 @@ org.gradle.jvmargs=-Xmx1G
# Fabric Properties # Fabric Properties
# check these on https://fabricmc.net/use # check these on https://fabricmc.net/use
# or better: https://modmuss50.me/fabric.html # or better: https://modmuss50.me/fabric.html
minecraft_version=1.14.3 minecraft_version=1.14.4-pre1
yarn_mappings=1.14.3+build.1 yarn_mappings=1.14.4-pre1+build.1
loader_version=0.4.8+build.155 loader_version=0.4.8+build.155
# Mod Properties # Mod Properties
@@ -146,6 +146,8 @@ public class CarpetScriptServer
{ {
setChatErrorSnooper(source); setChatErrorSnooper(source);
CarpetExpression ex = new CarpetExpression(module.getCode(), source, new BlockPos(0, 0, 0)); CarpetExpression ex = new CarpetExpression(module.getCode(), source, new BlockPos(0, 0, 0));
ex.getExpr().asAModule();
ex.scriptRunCommand(newHost, new BlockPos(source.getPosition())); ex.scriptRunCommand(newHost, new BlockPos(source.getPosition()));
} }
catch (CarpetExpressionException e) catch (CarpetExpressionException e)
+23 -6
View File
@@ -335,6 +335,15 @@ public class Expression implements Cloneable
private String expression; private String expression;
String getCodeString() {return expression;} String getCodeString() {return expression;}
private boolean allowNewlineSubstitutions = true;
private boolean allowComments = false;
void asAModule()
{
allowNewlineSubstitutions = false;
allowComments = true;
}
private String name; private String name;
String getName() {return name;} String getName() {return name;}
Expression withName(String alias) Expression withName(String alias)
@@ -2578,8 +2587,8 @@ public class Expression implements Cloneable
*/ */
public Expression(String expression) public Expression(String expression)
{ {
expression = expression.trim().replaceAll(";+$", ""); this.expression = expression.trim().replaceAll(";+$", "");
this.expression = expression.replaceAll("\\$", "\n").trim(); //this.expression = expression.replaceAll("\\$", "\n").trim();
VariablesAndConstants(); VariablesAndConstants();
UserDefinedFunctionsAndControlFlow(); UserDefinedFunctionsAndControlFlow();
Operators(); Operators();
@@ -2588,12 +2597,12 @@ public class Expression implements Cloneable
ListsLoopsAndHigherOrderFunctions(); ListsLoopsAndHigherOrderFunctions();
} }
private List<Tokenizer.Token> shuntingYard(String expression) private List<Tokenizer.Token> shuntingYard()
{ {
List<Tokenizer.Token> outputQueue = new ArrayList<>(); List<Tokenizer.Token> outputQueue = new ArrayList<>();
Stack<Tokenizer.Token> stack = new Stack<>(); Stack<Tokenizer.Token> stack = new Stack<>();
Tokenizer tokenizer = new Tokenizer(this, expression); Tokenizer tokenizer = new Tokenizer(this, expression, allowComments, allowNewlineSubstitutions);
Tokenizer.Token lastFunction = null; Tokenizer.Token lastFunction = null;
Tokenizer.Token previousToken = null; Tokenizer.Token previousToken = null;
@@ -2726,8 +2735,16 @@ public class Expression implements Cloneable
{ {
outputQueue.add(stack.pop()); outputQueue.add(stack.pop());
} }
case MARKER:
if ("$".equals(token.surface))
{
StringBuilder sb = new StringBuilder(expression);
sb.setCharAt(token.pos, '\n');
expression = sb.toString();
}
break;
} }
previousToken = token; if (token.type != Tokenizer.Token.TokenType.MARKER) previousToken = token;
} }
while (!stack.isEmpty()) while (!stack.isEmpty())
@@ -2796,7 +2813,7 @@ public class Expression implements Cloneable
private LazyValue getAST() private LazyValue getAST()
{ {
Stack<LazyValue> stack = new Stack<>(); Stack<LazyValue> stack = new Stack<>();
List<Tokenizer.Token> rpn = shuntingYard(this.expression); List<Tokenizer.Token> rpn = shuntingYard();
validate(rpn); validate(rpn);
for (final Tokenizer.Token token : rpn) for (final Tokenizer.Token token : rpn)
{ {
@@ -129,6 +129,7 @@ public class ScriptHost
case OPEN_PAREN: case OPEN_PAREN:
case COMMA: case COMMA:
case CLOSE_PAREN: case CLOSE_PAREN:
case MARKER:
return "Fail: "+tok.surface+" is not allowed in invoke"; return "Fail: "+tok.surface+" is not allowed in invoke";
} }
} }
+4 -1
View File
@@ -67,7 +67,7 @@ public class Tokenizer implements Iterator<Tokenizer.Token>
public static List<Token> simplepass(String input) public static List<Token> simplepass(String input)
{ {
Tokenizer tok = new Tokenizer(null, input); Tokenizer tok = new Tokenizer(null, input, false, false);
List<Token> res = new ArrayList<>(); List<Token> res = new ArrayList<>();
while (tok.hasNext()) res.add(tok.next()); while (tok.hasNext()) res.add(tok.next());
return res; return res;
@@ -233,6 +233,9 @@ public class Tokenizer implements Iterator<Tokenizer.Token>
lineno++; lineno++;
linepos = 0; linepos = 0;
} }
token.append(greedyMatch);
token.type = Token.TokenType.MARKER;
return token; // skipping setting previous
} }
pos++; pos++;
linepos++; linepos++;