public LuaToken(LuaTokenType t, Byte[] d, int p, int l) { Type = t; data = d; pos = p; line = l; }
public static string ToReadableString(this LuaTokenType t) { if (t == LuaTokenType.EOS) { return("EOS"); } if (t < LuaTokenType.First) { return(new string((char)t, 1)); } return(t.ToString()); }
public LuaToken(LuaTokenType t, Byte[] d, int p,int l) { Type = t; data = d; pos = p; line = l; }
/// <summary> /// Конвертация токенов в класс для работы /// </summary> /// <param name="tokens"></param> /// <returns></returns> static void TokensToLuaValue(List <LuaToken> tokens) { LuaValue current = new LuaValue(); void AddRoot() { var parent = current; current = new LuaValue(); parent.AddChildren(current); } void BackRoot() { current = current.parent; if (current.parent == null) { var last = current.AllChildren.Last(); last.GetMyFunctions(functions); ParseEvent?.Invoke(last); } } LuaTokenType pastTokenType = LuaTokenType.None; bool isComplexValue = false; foreach (var token in tokens) { switch (token.type) { case LuaTokenType.start: switch (pastTokenType) { case LuaTokenType.start: case LuaTokenType.endValue: isComplexValue = false; AddRoot(); break; case LuaTokenType.assign: isComplexValue = true; break; } break; case LuaTokenType.end: switch (pastTokenType) { case LuaTokenType.end: BackRoot(); break; } isComplexValue = false; break; case LuaTokenType.endValue: if (!isComplexValue) { BackRoot(); } break; case LuaTokenType.key: isComplexValue = false; AddRoot(); current.key = token.value; break; case LuaTokenType.assign: break; case LuaTokenType.value: current.AddValue(token.value); break; default: break; } pastTokenType = token.type; } CompliteEvent?.Invoke(); }
private void AppendSpace(StringBuilder lastLineBuilder, Token lastToken, LuaTokenInfo lastTokenInfo, Token token) { LuaTokenType lastTokenType = LuaTokenType.None; if (lastToken != null) { lastTokenType = GetTokenType(lastToken); } LuaTokenType tokenType = GetTokenType(token); if (lastTokenType == LuaTokenType.None) { // don't append space } else if (lastTokenType == LuaTokenType.LeftBracket) { // don't append space } else if (lastTokenType == LuaTokenType.RightBracket) { if (tokenType == LuaTokenType.Keyword) { AppendSpace(lastLineBuilder); } else if (tokenType == LuaTokenType.Operator) { if (token.Text == "." || token.Text == ":") { } else { AppendSpace(lastLineBuilder); } } // don't append space } else if (lastTokenType == LuaTokenType.Delimiter) { AppendSpace(lastLineBuilder); } else if (lastTokenType == LuaTokenType.Identifier) { if (tokenType == LuaTokenType.LeftBracket) { ; } else if (tokenType == LuaTokenType.RightBracket) { ; } else if (tokenType == LuaTokenType.Delimiter) { } else if (token.Text == "." || token.Text == ":") { } else { AppendSpace(lastLineBuilder); } } else if (lastTokenType == LuaTokenType.Keyword) { if (tokenType == LuaTokenType.LeftBracket) { if (lastToken.Text != "function") { AppendSpace(lastLineBuilder); } } else if (tokenType == LuaTokenType.RightBracket) { if (lastToken.Text != "end") { AppendSpace(lastLineBuilder); } } else if (tokenType == LuaTokenType.Delimiter) { } else if (token.Text == "." || token.Text == ":") { } else { AppendSpace(lastLineBuilder); } } else if (lastTokenType == LuaTokenType.Operator) { if (lastToken.Text == "#" || lastToken.Text == "." || lastToken.Text == ":") { // don't append sapce } else if (lastTokenInfo.IsUnOp == true && lastToken.Text != "not") { // don't append space } else { AppendSpace(lastLineBuilder); } } else { throw new Exception("error token type"); } }