コード例 #1
0
        private void ParseAssignStatement()
        {
            if (IsSecondTokenUniOp())
            {
                object[] uniParse = (object[])ParseExpression();
                _compileCommands.AddLast(uniParse);
                return;
            }

            var token = GetNext(); // type or variable-name

            Symbol lValue;

            if (token.Type == TokenType.Identifier)
            {
                lValue = _symbolTable.GetSymbol(token.Value);
                if (lValue == null)
                {
                    _symbolTable.Define(token.Value, TokenType.Integer);
                    lValue = _symbolTable.GetSymbol(token.Value);
                }
            }
            else
            {
                throw new Exception("Missing identifier");
            }

            Match(TokenType.Equals);

            object compileExpression = ParseExpression();

            _compileCommands.AddLast(new [] { "$assignment", lValue.Name, compileExpression });

            Match(TokenType.EOL);
        }