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); }
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"); } }