示例#1
0
 public LuaToken(LuaTokenType t, Byte[] d, int p, int l)
 {
     Type = t;
     data = d;
     pos  = p;
     line = l;
 }
示例#2
0
 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());
 }
示例#3
0
 public LuaToken(LuaTokenType t, Byte[] d, int p,int l) {
     Type = t;
     data = d;
     pos = p;
     line = l;
 }
示例#4
0
        /// <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();
        }
示例#5
0
        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");
            }
        }