コード例 #1
0
ファイル: Def.cs プロジェクト: johnmbaughman/ClassicBasic
        /// <summary>
        /// Executes the DEF command.
        /// </summary>
        public void Execute()
        {
            if (!_runEnvironment.CurrentLine.LineNumber.HasValue)
            {
                throw new Exceptions.IllegalDirectException();
            }

            var token        = _runEnvironment.CurrentLine.NextToken();
            var nameToken    = _runEnvironment.CurrentLine.NextToken();
            var bracketToken = _runEnvironment.CurrentLine.NextToken();

            if (token.Statement != TokenType.Fn ||
                nameToken.TokenClass != TokenClass.Variable ||
                bracketToken.Seperator != TokenType.OpenBracket)
            {
                throw new Exceptions.SyntaxErrorException();
            }

            var variableName = _expressionEvaluator.GetVariableName();

            bracketToken = _runEnvironment.CurrentLine.NextToken();
            var equalsToken = _runEnvironment.CurrentLine.NextToken();

            if (bracketToken.Seperator != TokenType.CloseBracket || equalsToken.Seperator != TokenType.Equal)
            {
                throw new Exceptions.SyntaxErrorException();
            }

            var userFunctionDefinition = new UserDefinedFunction
            {
                Line         = _runEnvironment.CurrentLine,
                LineToken    = _runEnvironment.CurrentLine.CurrentToken,
                FunctionName = nameToken.Text,
                VariableName = variableName
            };

            _runEnvironment.DefinedFunctions[userFunctionDefinition.FunctionName] = userFunctionDefinition;

            while (!_runEnvironment.CurrentLine.EndOfLine)
            {
                token = _runEnvironment.CurrentLine.NextToken();
                if (token.Seperator == TokenType.Colon)
                {
                    _runEnvironment.CurrentLine.PushToken(token);
                    return;
                }
            }
        }
コード例 #2
0
        /// <summary>
        /// Implements the DIM command.
        /// </summary>
        public void Execute()
        {
            IToken token;

            do
            {
                var name    = _expressionEvaluator.GetVariableName();
                var indexes = _expressionEvaluator.GetIndexes();
                if (indexes.Length > 0)
                {
                    _variableRepository.DimensionArray(name, indexes);
                }

                token = _runEnvironment.CurrentLine.NextToken();
            }while (token.Seperator == TokenType.Comma);
            _runEnvironment.CurrentLine.PushToken(token);
        }