Пример #1
0
        private void AnalyzeVariables()
        {
            var variables = new List <Token>();

            do
            {
                if (_currentToken.Symbol == LPD.Symbol.IDENTIFIER)
                {
                    variables.Add(_currentToken);
                    _currentToken = _lexical.GetNextToken();
                    if (_currentToken.Symbol == LPD.Symbol.COMMA ||
                        _currentToken.Symbol == LPD.Symbol.COLON)
                    {
                        if (_currentToken.Symbol == LPD.Symbol.COMMA)
                        {
                            _currentToken = _lexical.GetNextToken();
                            if (_currentToken.Symbol == LPD.Symbol.COLON)
                            {
                                throw new UnexpectedTokenException(UnexpectedTokenMessage("identifier"));
                            }
                        }
                        // Else is colon
                    }
                    else
                    {
                        throw new UnexpectedTokenException(UnexpectedTokenMessage());
                    }
                }
                else
                {
                    throw new UnexpectedTokenException(UnexpectedTokenMessage());
                }
            } while (_currentToken.Symbol != LPD.Symbol.COLON);

            _currentToken = _lexical.GetNextToken();
            LPD.ValueType valueType = AnalyzeValueType();

            foreach (var var in variables)
            {
                _symbolsTable.Add(new TypedSymbol(var.Lexeme, _scope, LPD.IdentifierType.VARIABLE, valueType));
            }
        }
Пример #2
0
 public TypedSymbol(string label, uint scope, LPD.IdentifierType type, LPD.ValueType returnType)
     : base(label, scope, type)
 {
     ReturnType = returnType;
 }