public void process(VaribleDeclaration varibleDeclaration) { Token _identifier = (Token)varibleDeclaration.getTokensList()[0]; //рассказать про косяк сереге Type type = (Type)varibleDeclaration.getTokensList()[1]; try //для массива { ArrayType arrayType = (ArrayType)type.getTokensList()[0]; _isArray = true; _type = (Token)arrayType.getTokensList()[0]; _length = (Token)arrayType.getTokensList()[1]; SemanticAnalizer.checkIsDefineAgain(_identifier.value); SemanticAnalizer.checkInitEmptyArray(_identifier.value, Int32.Parse(_length.value)); SemanticAnalizer.addVarible(_identifier.value, _type.value, Int32.Parse(_length.value)); } catch // для инта { IntegerType integerType = (IntegerType)type.getTokensList()[0]; _isArray = false; _type = (Token)integerType.getTokensList()[0]; SemanticAnalizer.checkIsDefineAgain(_identifier.value); SemanticAnalizer.addVarible(_identifier.value, _type.value); } generate(); }
List <Token> getArrayInitializtionList(ArrayAssignment arrayAssignmnent) { List <Token> tokens = new List <Token>(); foreach (Token token in arrayAssignmnent.getTokensList()) { tokens.Add(token); } SemanticAnalizer.checkVarible(_leftOp.value); SemanticAnalizer.checkInitEmptyArray(_leftOp.value, tokens.Count); SemanticAnalizer.checkIsLengthArrayEqual(_leftOp.value, tokens.Count); if (_isArrayElementLeft) { SemanticAnalizer.incompatibleTypes(); } else { SemanticAnalizer.checkCompareTypes(_leftOp.value, Constants.INTARRAY); } return(tokens); }