コード例 #1
0
    public T2 Assign()
    {
        T2    statement = default;
        Token token     = LookAheadToken;

        MatchThenLookAhead(TokenTag.ID);
        IdExpression idExpression = TopSymbol.Get(token);

        if (idExpression is null)
        {
            Error($"{token} undeclared");
        }
        if (LookAheadToken?.Tag == '=')
        {
            LookAhead();
            statement = (T2)Activator.CreateInstance(typeof(SetStatement), new object[] { idExpression, Boolean(), _emitterNode });
        }
        else
        {
            AccessingOperationExpression accessingOperationExpression = Offset(idExpression);
            MatchThenLookAhead('=');
            statement = (T2)Activator.CreateInstance(typeof(SetElementStatement), new object[] { accessingOperationExpression, Boolean(), _emitterNode });
        }
        MatchThenLookAhead(';');
        return(statement);
    }
コード例 #2
0
 public SetElementStatement(AccessingOperationExpression accessingOperationExpression, Expression expression, Node node) : base(node)
 {
     _arrayExpression = accessingOperationExpression.ArrayExpression;
     _indexExpression = accessingOperationExpression.IndexExpression;
     _expression      = expression;
     if (Check(accessingOperationExpression.TypeToken, _expression.TypeToken) == null)
     {
         _node.Error("Type Error");
     }
 }