Exemple #1
0
        private DefineVariableNode ParseDefineVariable(out AssignNode assign, bool haveAssign = true,
                                                       AccessLevel accessLevel = AccessLevel.Local, bool isStatic = false)
        {
            assign = null;
            bool isArray = false;
            byte rankNum = 1;

            _lexer.Match(TokenType.Identifer); //TODO:使用Match函数报错
            Token type = _lexer.NextToken;

            if (_lexer.MatchNext("["))
            {
                _lexer.Next();
                for (; !_lexer.Match("]"); _lexer.Next())
                {
                    if (_lexer.Match(","))
                    {
                        rankNum++;
                    }
                    else
                    {
                        return(null); //TODO:报错 无效的秩说明符:应为","或"]"
                    }
                }
                _lexer.MatchNow("]");
                isArray = true;
            }
            _lexer.Match(TokenType.Identifer); //TODO:使用Match函数报错
            Token name = _lexer.NextToken;
            _lexer.Next();
            DefineVariableNode defineVariable = _syntaxFactory.GetDefineVariableNode(name, type, accessLevel, isStatic, isArray, rankNum);
            if (_lexer.NextTokenContent == ";")
            {
                _lexer.Next();
                return(defineVariable);
            }
            if (!haveAssign)
            {
                return(defineVariable);
            }
            _lexer.Back();
            assign = ParseAssign();
            return(defineVariable);
        }